2 votes

déterminer la fréquence de plusieurs variables en fonction de plusieurs facteurs dans R

Supposons que je dispose d'un ensemble de données comme celui-ci :

id <- c(1,1,1,2,2,3,3,4,4)
visit <- c("A", "B", "C", "A", "B", "A", "C", "A", "B")
test1 <- c(12,16, NA, 11, 15,NA, 0,12, 5)
test2 <- c(1,NA, 2, 2, 2,2, NA,NA, NA)
df <- data.frame(id,visit,test1,test2)

Je souhaite connaître le nombre de points de données par visite PER test afin que le résultat final ressemble à ceci :

visit   test1    test2
A       3        3
B       3        1
C       1        1

Je sais que je peux utiliser la fonction d'agrégation comme suit pour une variable, comme indiqué dans le document suivant poste plus ancien :

 aggregate(x = df$id[!is.na(df$test)], by = list(df$visit[!is.na(df$test)]), FUN = length)

Mais comment procéder pour des tests multiples ?

2voto

989 Points 8782

L'utilisation table y rowSums dans la base R :

cols <- 3:4    
sapply(cols, function(i) rowSums(table(df$visit, df[,i]), na.rm = TRUE))

#   [,1] [,2]
#A    3    3
#B    3    1
#C    1    1

2voto

Mike H. Points 10739

Vous pouvez également utiliser data.table ce qui pourrait être utile pour un nombre flexible de colonnes :

cols <- names(df)[grepl("test",names(df))]
setDT(df)[,lapply(.SD, function(x) sum(!is.na(x))), by = visit, .SDcols = cols]

df
#   visit test1 test2
#1:     A     3     3
#2:     B     3     1
#3:     C     1     1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X