R:1 列或多列的行总和

R: Row sums for 1 or more columns

这令人沮丧,因为感觉它应该如此简单,但却浪费了几个小时。

我想获取数据框中列列表的行总和,但该列表(由用户设置)很可能是长度 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 个或 >1 个 goodcols?

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

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

data.framematrixarray 中只剩下一列时,R 会将其强制转换为 vector。要保持尺寸,您需要使用参数 drop.
Drop 的定义(正如您在 help("[.data.frame") 中所读到的):

logical. If TRUE the result is coerced to the lowest possible dimension. The default is to drop if only one column is left, but not to drop if only one row is left.

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

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