对data.frame或matrix中的行求和

时间:2010-10-21 21:02:01

标签: r

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

如果我有200列和100行,我想创建一个包含100行的新列,其中列为43到167列。列有1或0.使用包含每行的总和,我将能够对具有最多遗传标记的个体进行排序。

我觉得这很接近:

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

4 个答案:

答案 0 :(得分:80)

您可以使用rowSums

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

答案 1 :(得分:26)

rowSums函数(正如Greg提到的那样)会做你想要的,但你在答案中混合了子集化技术,在使用“[]”时不要使用“$”,你的代码看起来应该更像:

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

如果你想使用除sum之外的函数,那么看看?申请在行或列中应用一般函数。

答案 2 :(得分:2)

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

cbind(data, total = rowSums(data))

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

Adding a new column to matrix error

答案 3 :(得分:1)

这也有帮助,但毫无疑问,最好的选择是 rowSums 函数:

data$new <- Reduce(function(x, y) {
  x + data[, y]
}, init = data[, 43], 44:167)