Étant donné cet ensemble de données:
Name Height Weight
1 Mary 65 110
2 John 70 200
3 Jane 64 115
J'aimerais additionner toutes les colonnes qualificatives (taille et poids) donnant
199 425
Le problème est que les qualificatifs peuvent être plus que 2 (c'est-à-dire plus que simplement la taille et le poids).
Je peux le faire.
# 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))
Mais cela prend trop de temps lorsque le qualificatif augmente… .. Quelle est la manière compacte de le faire?
Vous pouvez utiliser la fonction colSums()
pour calculer la somme de toutes les valeurs. [,-1]
garantit que la première colonne avec les noms des personnes est exclue.
colSums(people[,-1])
Height Weight
199 425
En supposant que plusieurs colonnes ne soient pas numériques ou que leur ordre ne soit pas fixe, une approche plus générale serait la suivante:
colSums(Filter(is.numeric, people))
mapply(sum,people[,-1])
Height Weight
199 425
Nous pouvons utiliser dyplyr
pour sélectionner uniquement les colonnes numériques et purr
pour obtenir sum
pour toutes les colonnes. (peut être utilisé pour obtenir quelle que soit la valeur de toutes les colonnes, telles que moyenne, minimum, maximum, etc.)
library("dplyr")
library("purrr")
people %>%
select_if(is.numeric) %>%
map_dbl(sum)
Ou un autre moyen simple de n'utiliser que dyplyr
library("dplyr")
people %>%
summarize_if(is.numeric, sum, na.rm=TRUE)
Par souci d'achèvement:
> apply(people[,-1], 2, function(x) sum(x))
Height Weight
199 425