50

给定这个数据集:

  Name Height Weight
1 Mary     65    110
2 John     70    200
3 Jane     64    115

我想总结每个限定符列(高度和重量)产生

 199  425

问题是限定符可以不仅仅是2(即不仅仅是身高和体重)。

我可以做这个。

    # Create the dataframe people
    Name <- c("Mary", "John", "Jane")
    Height <- c(65,70,64)
    Weight <- c(110,200,115)
    people <- data.frame(Name, Height, Weight)

    res <- c(sum(people$Height),sum(people$Weight))

但是当预选赛增加时,它变得太长了。什么是紧凑的方法?

4

5 回答 5

86

您可以使用函数colSums()来计算所有值的总和。 [,-1]确保排除包含人名的第一列。

 colSums(people[,-1])
Height Weight 
   199    425

假设可能有多个非数字列,或者您的列顺序不固定,更通用的方法是:

colSums(Filter(is.numeric, people))
于 2013-08-23T06:54:24.460 回答
18

我们可以使用dplyr仅选择数字列并purr获取sum所有列。(可用于获取所有列的值,例如平均值、最小值、最大值等)

library("dplyr")
library("purrr")

people %>%
    select_if(is.numeric) %>%
    map_dbl(sum)

或仅使用另一种简单的方法dplyr-从(dplyr 1.0.0)开始,我们可以使用across()

library("dplyr")
people %>%
    summarise(across(where(is.numeric), ~ sum(.x, na.rm = TRUE)))

library("dplyr")
people %>%
    summarize_if(is.numeric, sum, na.rm=TRUE)
于 2019-01-31T16:32:29.820 回答
5
mapply(sum,people[,-1])

Height Weight 
   199    425 
于 2018-02-05T13:41:51.060 回答
2

为了完成:

 apply(people[,-1], 2, function(x) sum(x))
#Height Weight 
#   199    425 
于 2018-07-05T17:02:22.707 回答
0

你也可以试试a <- apply(mtcars[,c(select.colums)], 2, sum )

a <- apply(people[,c(2,3)], 2, sum )
于 2021-06-02T13:16:58.240 回答