Je veux agréger les données par groupe. Cependant, chaque observation peut appartenir à plusieurs groupes (par exemple, l'observation 1 appartient aux groupes A et B). Je n'ai pas pu trouver une manière agréable de réaliser ceci avec data.table
. Actuellement, j'ai créé pour chacun des groupes possibles une variable logique qui prend la valeur TRUE
si l'observation appartient à ce groupe. Je cherche une meilleure façon de le faire que celle présentée ci-dessous. J'aimerais également savoir comment je pourrais y parvenir avec la fonction tidyverse
.
library(data.table)
# Data
set.seed(1)
TF <- c(TRUE, FALSE)
time <- rep(1:4, each = 5)
df <- data.table(time = time, x = rnorm(20), groupA = sample(TF, size = 20, replace = TRUE),
groupB = sample(TF, size = 20, replace = TRUE),
groupC = sample(TF, size = 20, replace = TRUE))
# This should be nicer and less repetitive
df[groupA == TRUE, .(A = sum(x)), by = time][
df[groupB == TRUE, .(B = sum(x)), by = time], on = "time"][
df[groupC == TRUE, .(C = sum(x)), by = time], on = "time"]
# desired output
time A B C
1: 1 NA 0.9432955 0.1331984
2: 2 1.2257538 0.2427420 0.1882493
3: 3 -0.1992284 -0.1992284 1.9016244
4: 4 0.5327774 0.9438362 0.9276459