对R中data.frame的每一列中的所有值求和

pdu*_*ois 31 r

鉴于此数据集:

  Name Height Weight
1 Mary     65    110
2 John     70    200
3 Jane     64    115
Run Code Online (Sandbox Code Playgroud)

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

 199  425
Run Code Online (Sandbox Code Playgroud)

问题是限定符可能不仅仅是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))
Run Code Online (Sandbox Code Playgroud)

但是当资格赛增加时,它会变得太长.什么是紧凑的方式来做到这一点?

Did*_*rts 64

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

 colSums(people[,-1])
Height Weight 
   199    425
Run Code Online (Sandbox Code Playgroud)

假设可能有多个不是数字的列,或者您的列顺序未修复,则更通用的方法是:

colSums(Filter(is.numeric, people))
Run Code Online (Sandbox Code Playgroud)


cam*_*sia 7

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

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

people %>%
    select_if(is.numeric) %>%
    map_dbl(sum)
Run Code Online (Sandbox Code Playgroud)

或仅使用另一种简单方法 dplyr

library("dplyr")
people %>%
    summarize_if(is.numeric, sum, na.rm=TRUE)
Run Code Online (Sandbox Code Playgroud)


don*_*ati 5

mapply(sum,people[,-1])

Height Weight 
   199    425 
Run Code Online (Sandbox Code Playgroud)