为什么我不能使用dplyr应用函数来创建一个包含mutate()的新列?

时间:2015-05-07 21:45:14

标签: r dplyr

我有一个data.frame,让我们称之为" DF"

我试图创建一个列,让我们调用它"结果",将其他四列相加。

使用dplyr,我可以使用以下代码完成:

mutate(df, result=col1+col2+col3+col4)

然而,当我尝试以下内容时:

mutate(df, result=sum(col1, col2, col3, col4))

它无法正常工作。它为什么会发生?

1 个答案:

答案 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