/ / R: comment additionner les colonnes groupées par un facteur? - r, nettoyage des données

R: comment additionner les colonnes regroupées par facteur? - r, nettoyage des données

Si j'ai une table comme celle-ci:

user,v1,v2,v3
a,1,0,0
a,1,0,1
b,1,0,0
b,2,0,3
c,1,1,1

Comment puis-je le transformer en cela?

user,v1,v2,v3
a,2,0,1
b,3,0,3
c,1,1,1

Réponses:

2 pour la réponse № 1

Vous pouvez utiliser dplyr pour ça:

library(dplyr)
df = data.frame(
user = c("a", "a", "b", "b", "c"),
v1   = c(1, 1, 1, 2, 1),
v2   = c(0, 0, 0, 0, 1),
v3   = c(0, 1, 0, 3, 1))

group_by(df, user) %>%
summarize(v1_sum = sum(v1),
v2_sum = sum(v2),
v3_sum = sum(v3))

Si vous n'êtes pas familier avec le %>% notation, il est fondamentalement comme la tuyauterie de bash. Il prend la sortie de group_by() et le met dans summarize(). La même chose serait accomplie de cette façon:

by_user = group_by(df, user)
df_summarized = summarize(by_user,
v1_sum = sum(v1),
v2_sum = sum(v2),
v3_sum = sum(v3))

3 pour la réponse № 2

En base R,

D <- matrix(c(1, 0, 0,
1, 0, 1,
1, 0, 0,
2, 0, 3,
1, 1, 1),
ncol=3, byrow=TRUE, dimnames=list(1:5, c("v1", "v2", "v3")))
D <- data.frame(user=c("a", "a", "b", "b", "c"), D)
aggregate(. ~ user, D, sum)

Résultats

> aggregate(. ~ user, D, sum)
user v1 v2 v3
1    a  2  0  1
2    b  3  0  3
3    c  1  1  1