Given this data set:
Name Height Weight
1 Mary 65 110
2 John 70 200
3 Jane 64 115
I'd like to sum every qualifier columns (Height and Weight) yielding
199 425
The problem is that the qualifiers can be more than just 2 (i.e. more than just Height and Weight).
I can do this.
# 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))
But it gets too long when the qualifier increase. What's the compact way to do it?
This question is related to
r
mapply(sum,people[,-1])
Height Weight
199 425
We can use dplyr
to select only numeric columns and purr
to get sum
for all columns. (can be used to get what ever value for all columns, such as mean, min, max, etc. )
library("dplyr")
library("purrr")
people %>%
select_if(is.numeric) %>%
map_dbl(sum)
Or another easy way by only using dplyr
library("dplyr")
people %>%
summarize_if(is.numeric, sum, na.rm=TRUE)
For the sake of completion:
apply(people[,-1], 2, function(x) sum(x))
#Height Weight
# 199 425
Source: Stackoverflow.com