鉴于此数据集:
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))
但是当资格赛增加时,它会变得太长。 什么是紧凑的方式呢?
答案 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 )