我有一个data.frame,让我们称之为" DF"
我试图创建一个列,让我们调用它"结果",将其他四列相加。
使用dplyr,我可以使用以下代码完成:
mutate(df, result=col1+col2+col3+col4)
然而,当我尝试以下内容时:
mutate(df, result=sum(col1, col2, col3, col4))
它无法正常工作。它为什么会发生?
答案 0 :(得分:1)
正如所指出的+
和sum()
行为不同。考虑:
> sum(1:10,1:10)
[1] 110
> `+`(1:10,1:10)
[1] 2 4 6 8 10 12 14 16 18 20
sum()
您想要的每一行的变量 rowwise()
:library(dplyr)
df <- data_frame(w = letters[1:3], x=1:3, y = x^2, z = y - x)
# Source: local data frame [3 x 4]
#
# w x y z
# 1 a 1 1 0
# 2 b 2 4 2
# 3 c 3 9 6
df %>% rowwise() %>% mutate(result = sum(x, y, z))
# Source: local data frame [3 x 5]
# Groups: <by row>
#
# w x y z result
# 1 a 1 1 0 2
# 2 b 2 4 2 8
# 3 c 3 9 6 18
将其与:
进行比较df %>% mutate(result = x + y + z)
# Source: local data frame [3 x 5]
#
# w x y z result
# 1 a 1 1 0 2
# 2 b 2 4 2 8
# 3 c 3 9 6 18
df %>% mutate(result = sum(x, y, z)) # sums over all of x, y and z and recycles the result!
# Source: local data frame [3 x 5]
#
# w x y z result
# 1 a 1 1 0 28
# 2 b 2 4 2 28
# 3 c 3 9 6 28