【问题标题】:Sum Columns in a Data Frame对数据框中的列求和
【发布时间】:2016-01-27 15:26:40
【问题描述】:

我有一个 8 列的数据框,其中每一列相加得到总数。然后我必须合并前 2 列的总和,然后是下 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 列。我想知道是否有办法使该过程自动化。

【问题讨论】:

  • 是的,有办法:)

标签: r sum


【解决方案1】:

如果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)

【讨论】:

  • 工作就像一个魅力。解决方案比我想象的还要短。谢谢!
  • +1 只是一点建议。如果您在第一行分配colSums() 结果会更快,这样您就不会计算两次。以防万一数据很大
  • 真的我的解决方案加倍时间,只想要一个班轮 ^ ^
猜你喜欢
  • 2016-11-01
  • 2014-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
  • 1970-01-01
相关资源
最近更新 更多