我有一个8列的数据框,其中每列被求和以得到总和。然后我必须合并前两列的总和,然后是下一个2,再次是下一个2,依此类推,以便我留下4列(前2的总和,下2的总和等等)。 以下是数据示例:
A B A1 B1 A2 B2 A3 B3
1 2 1 2 1 1 3 1
2 3 1 1 3 3 2 1
5 6 6 4 3 2 1 1
这是我使用的代码,我能够成功地执行此操作:
ColumnSums<-lapply(ColumnSums, function(x) sum(x))
AB<-ColumnSums$A+ColumnSums$B
A1B1<-ColumnSums$A1+ColumnSums$B1
A2B2<-ColumnSums$A2+ColumnSums$B2
A3B3<-ColumnSums$A3+ColumnSums$B3
CombinedTotals<-c(AB,A1B1,A2B2,A3B3)
names(CombinedTotals)<-c("AB","A1B1","A2B2","A3B3")
我只是想知道是否有办法修剪此代码。具体来说,我的代码的第二部分。我必须手动组合每个总共2列。我想知道是否有办法使该过程自动化。
答案 0 :(得分:2)
如果df
是原始data.frame
:
setNames(colSums(df)[c(F, T)]+colSums(df)[c(T,F)], c("AB","A1B1","A2B2","A3B3"))
#AB A1B1 A2B2 A3B3
#19 15 13 9
或者:
tapply(colSums(df), (seq(ncol(df))-1) %/% 2, sum)