如何对数据框的列值进行求和?

104
我有一个数据框,其中包含几列:一些是数字,一些是字符。如何计算特定列的总和?我已经在谷歌上搜索了很多函数(sum、cumsum、rowsum、rowSums、colSums、aggregate、apply),但我无法理解它们的意义。
例如,假设我有一个名为people的数据框,其中包含以下列。
people <- read.table(
  text = 
    "Name Height Weight
    Mary 65     110
    John 70     200
    Jane 64     115", 
  header = TRUE
)
…

如何计算所有权重的总和?
5个回答

130
你可以直接使用sum(people$Weight)sum函数求向量的和,而people$Weight从你的数据框中检索出重量列。
注意 - 通过使用?sum?colSums等可以获取内置帮助信息(顺便说一下,colSums将为每列提供总和)。

2
当我这样做时,我得到了:[1] NA。我查看了该列的数据,发现最后一行有NA,这是为什么吗? - User
11
没错,这就是原因。如果你愿意的话,可以通过 sum(people$Weight,na.rm=TRUE) 忽略掉那些缺失值(你可以在 ?sum 中了解这个选项)。 - mathematical.coffee

11

要对 data.frame 中的数值进行求和,您首先需要将它们提取为向量。

有几种方法可以做到这一点:

# $ operatior
x <- people$Weight
x
# [1] 65 70 64

或者使用与矩阵相似的 [, ]

x <- people[, 'Weight']
x
# [1] 65 70 64

一旦您获得向量,您可以使用任何向量到标量函数来聚合结果:

sum(people[, 'Weight'])
# [1] 199

如果您的数据中存在NA值,您应该指定na.rm参数:

sum(people[, 'Weight'], na.rm = TRUE)

4

在列求和之后排序:

order(colSums(people),decreasing=TRUE)

如果超过20列

order(colSums(people[,c(5:25)],decreasing=TRUE) ##in case of keeping the first 4 columns remaining.

3
当您的列中存在“NA”值时,那么:
sum(as.numeric(JuneData1$Account.Balance), na.rm = TRUE)

3

您可以使用tidyverse包来解决这个问题,代码看起来会像下面这样(对我来说更易读):

library(tidyverse)  
people %>%
summarise(sum(weight, na.rm = TRUE))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接