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

时间:2013-08-23 06:52:22

标签: r

鉴于此数据集:

  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))

但是当资格赛增加时,它会变得太长。 什么是紧凑的方式呢?

5 个答案:

答案 0 :(得分:60)

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

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

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

colSums(Filter(is.numeric, people))

答案 1 :(得分:2)

mapply(sum,people[,-1])

Height Weight 
   199    425 

答案 2 :(得分:2)

我们可以使用devise仅选择数字列,使用user.user_airports NoMethodError: undefined method `user_airports' for #<User:0x00007fa7bc430e70> from /Users/TuzsNewMacBook/.rvm/gems/ruby-2.3.7/gems/activemodel-5.2.2/lib/active_model/attribute_methods.rb:430:in `method_missing' user.home_airports NoMethodError: undefined method `home_airports' for #<User:0x00007fa7bc430e70> from /Users/TuzsNewMacBook/.rvm/gems/ruby-2.3.7/gems/activemodel-5.2.2/lib/active_model/attribute_methods.rb:430:in `method_missing' 获得所有列的dyplyr。 (可用于获取所有列的均值,例如均值,最小值,最大值等。)

purr

或者仅使用sum

的另一种简单方法
library("dplyr")
library("purrr")

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

答案 3 :(得分:0)

为了完整起见:

> apply(people[,-1], 2, function(x) sum(x))
Height Weight 
   199    425 

答案 4 :(得分:0)

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

a <- apply(people[,c(2,3)], 2, sum )