1

这令人沮丧,因为感觉它应该很简单,但它会占用几个小时。

我想获取数据框中列列表的行总和,但该列表(由用户设置)很可能是长度 1,即一个列号。

rowSums不允许对 1 列求和。

rowsum使用我发现完全无法破解的组。我已经使用这个例子很久了,仍然不知道它的用途,但它不能被省略。

这里的最佳答案使用rowSumsor apply; 第二个使用.SDand lapplybut 使用:=and.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])
4

1 回答 1

4

data.frame当您在 a 、matrix或中只剩下一列时array,R 会将其强制转换为 a vector。要保留尺寸,您需要使用参数drop
Drop由以下定义(如您在 中所读help("[.data.frame")):

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

rowSums因此,在您的情况下,如果您想使用任何列数,则需要使用以下代码:

y <- rowSums(x[, goodcols, drop = FALSE])
于 2015-09-01T12:00:59.607 回答