R:1列或更多列的行总和

时间:2015-09-01 11:48:09

标签: r rowsum

这令人沮丧,因为它感觉它应该如此简单,但它却在吸收数小时。

我想得到数据框中列的列的行和,但是该列表 - 由用户设置 - 很可能是长度1,即一个列号。

rowSums不允许对1列进行求和。

rowsum使用我发现完全无法修复的群组。我已经玩了很长时间的例子,但仍然不知道它的用途,但它不能被省略。

回答here使用rowSumsapply;第二个使用.SDlapply,但使用:=.SD以及其他不会出现在R帮助中的术语,我之前也看不到,这只是打开另一个寻找和混淆的虫洞。

所以:有什么我可以用的:

x <- matrix(runif(100), ncol = 5)
goodcols <- c(1,3,5)
y <- rowSums(x[,goodcols])

适用于1或&gt; 1个好词?

提前致谢。目前我正在使用:

ifelse(length(goodcols)>1,
y<-rowSums(x[,goodcols]),
y<-x[,goodcols])

1 个答案:

答案 0 :(得分:4)

如果data.framematrixarray中只剩下一列,则R会将其强制转换为vector。要保留尺寸,您需要使用参数drop Drop已定义(正如您可以在help("[.data.frame")中阅读):

  

逻辑。如果为TRUE,则将结果强制转换为可能的最低维度。如果只剩下一列,则默认为删除,但如果只剩下一行则不丢弃。

因此,在您的情况下,如果您希望rowSums无论列数是多少,都需要使用以下代码:

y <- rowSums(x[, goodcols, drop = FALSE])