我有一个数据框:
df <- data.frame('a'=c(1,2,3,4,5), 'b'=c(1,20,3,4,50))
df
a b
1 1 1
2 2 20
3 3 3
4 4 4
5 5 50
我想根据现有列创建一个新列。像这样的事情:
if (df[['a']] == df[['b']]) {
df[['c']] <- df[['a']] + df[['b']]
} else {
df[['c']] <- df[['b']] - df[['a']]
}
问题是if
仅检查第一行的条件...如果我从上面创建一个函数if
声明然后我使用apply()
(or mapply()
...), 这是相同的。
在 Python/pandas 中我可以使用这个:
df['c'] = df[['a', 'b']].apply(lambda x: x['a'] + x['b'] if (x['a'] == x['b']) \
else x['b'] - x['a'], axis=1)
我想要 R 中类似的东西。所以结果应该是这样的:
a b c
1 1 1 2
2 2 20 18
3 3 3 6
4 4 4 8
5 5 50 45