汇总data.frame或矩阵中的行


79

我有一个非常大的数据框,其中行作为观察值,列作为遗传标记。我想创建一个新列,其中包含使用R为每个观察选择的列数之和。

如果我有200列和100行,我想创建一个新列,该列有100行,其总和是从43到167列。这些列有1或0。新列包含每个列的总和行,我将能够对那些遗传标记最多的人进行排序。

我觉得这很接近:

data$new=sum(data$[,43:167])

Answers:


102

您可以使用 rowSums

rowSums(data) 应该给你你想要的。


16
对于OP问题data$new <- rowSums(data[43:167])
Marek 2010年

5
为了节省时间,也许是:避免与其他功能混淆rowsum
Augustin'1

37

rowSums函数(如Greg所述)将完成您想做的事情,但是您在答案中混合了子集技术,使用“ []”时不要使用“ $”,您的代码应类似于:

data$new <- rowSums( data[,43:167] )

如果要使用sum以外的函数,请查看?apply以在行或列上应用常规函数。


我不确定为什么会收到此错误:rowSums(incomeData)中的错误:“ x”必须是数字
munmunbb

1
@munmunbb,您收到此错误,因为incomeData不是数字。使用类似的东西str(incomeData)来查看它是什么,然后可能将其转换为数值矩阵。
格雷格·斯诺

5

我来到这里是希望找到一种方法来获取数据表中所有列的总和,并遇到实现上述解决方案的问题。一种使用所有列的总和添加列的方法使用以下cbind函数:

cbind(data, total = rowSums(data))

此方法将一total列添加到数据中,避免了在使用上述解决方案尝试对所有列求和时产生的对齐问题(请参见下面的帖子,以获取有关此问题的讨论)。

向矩阵错误添加新列


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.