我有多个变量按组求和。变量的名称具有完全相同的第一个字符,并从1到n结束。所有要累加的变量在数据帧中并排显示。我能找到的是:
id<-1:nrow(df)
n<-length(id)
data2<-aggregate(cbind(vol_1,vol_2,vol_3,vol_4,vol_5,vol_6,vol_7,vol_8,vol_9,vol_10)~group,data=data1,sum,na.rm=T)
我如何有效地知道n下次可以改变?
答案 0 :(得分:1)
您还可以使用数据表
library(data.table)
dt <- data.table(df)
dt[,.(sum(vol_1),sum(vol_2)),by=.(group)]
答案 1 :(得分:0)
您似乎正在寻找rowSums
您可以尝试:
vars <- c("vol_1","vol_2","vol_3","vol_4","vol_5","vol_6","vol_7","vol_8","vol_9","vol_10")
as.matrix(vars)
rowSums(vars)
答案 2 :(得分:0)
如果变量都以相同的字符开头,请说“ v”,那么 dplyr 包中的summarise_at
函数就派上用场了:
library(dplyr)
df %>%
group_by(group) %>%
summarise_at(vars(starts_with("v")), sum)
# A tibble: 2 x 4
group vol_1 vol_2 vol_3
<fct> <int> <int> <int>
1 1 29 27 24
2 2 26 28 31
这与您的aggregate
命令得到的结果相同。
数据:
set.seed(123)
df <- data.frame(id=1:10, group=gl(2, 5),
vol_1=sample(10), vol_2=sample(10), vol_3=sample(10))
df
id group vol_1 vol_2 vol_3
1 1 1 3 10 8
2 2 1 10 5 7
3 3 1 2 3 2
4 4 1 8 8 1
5 5 1 6 1 6
6 6 2 9 4 3
7 7 2 1 6 4
8 8 2 7 9 10
9 9 2 5 7 9
10 10 2 4 2 5