我有以下压缩数据集:
a<-as.data.frame(c(2000:2005))
a$Col1<-c(1:6)
a$Col2<-seq(2,12,2)
colnames(a)<-c("year","Col1","Col2")
for (i in 1:2){
a[[paste("Var_", i, sep="")]]<-i*a[[paste("Col", i, sep="")]]
}
我想对Var 1和Var 2列求和,我用途:
a$sum<-a$Var_1 + a$Var_2
实际上,我的数据集要大得多-我想从Var_1到Var_n求和(n最多可以是20)。必须有一种比以下方法更有效的方法:
a$sum<-a$Var_1 + ... + a$Var_n
8条答案
按热度按时间a5g8bdjr1#
这里有一个使用
tidyverse
的解决方案。您可以使用select()
函数在mutate()
中选择适当的列,将其扩展到任意多个列。由reprex package(v0.2.1)于2019-01-01创建
disbfnqx2#
您可以使用
colSums(a[,c("Var1", "Var2")])
或rowSums(a[,c("Var_1", "Var_2")])
。在您的情况下,您需要后者。0pizxfdo3#
使用dplyr可以使用
或更有效地
myzjeezk4#
如果您正在处理非常大的数据集,
rowSums
可能会很慢。另一种方法是Rfast包中的
rowsums
函数。这需要您在过程中将数据转换为matrix
,并使用列索引而不是名称。下面是基于您的代码的示例:qvsjd97n5#
基准测试似乎表明普通的
Reduce('+', ...)
是最快的,库只是让它(至少稍微)慢一点,至少对于mtcars
来说是这样,即使我把它扩展到很大。验证码:
xjreopfe6#
您可以使用以下命令:
6tqwzwtp7#
在Base R中:
你可以使用
sapply
:这是非常可靠的,它适用于任何事情。
a5g8bdjr8#
另一个解决方案是
janitor
包:或者等效地,使用紧凑tidyselect语法,
请注意,
janitor::adorn_totals(a, where = "col")
会将除第一列之外的所有数值列相加。