【发布时间】:2015-05-07 21:45:14
【问题描述】:
我有一个data.frame,我们称之为“df”。
我正在尝试创建一个列,我们称之为“结果”,将其他四列相加。
使用 dplyr,我可以使用以下代码:
mutate(df, result=col1+col2+col3+col4)
但是,当我尝试以下操作时:
mutate(df, result=sum(col1, col2, col3, col4))
它不工作。为什么会发生?
【问题讨论】:
-
按照设计,它们做了两件不同的事情。忘记 dplyr,定义一些向量并将
col1 + col2与sum(col1,col2)进行比较。他们做不同的事情。 -
试试
sum(df$col1,df$col2),你会发现它是一个标量,而不是一个向量。 -
sum()总是折叠为单个值,mutate()通过一次将整个列传递给函数来运行。+运算符是矢量化的,在这种情况下是首选。 -
你是对的。它们完全不同。
-
如果您想对所有列求和,但又不想输入
+,可以使用Reduce(`+`,list(col1,col2,col3,col4))。我敢打赌,dplyr的缩写是list...