Modérateur : Groupe des modérateurs
Code : Tout sélectionner
library(purrr)
library(dplyr)
rle_id <-
tapply(donnees$Event, donnees$ID, rle) %>%
transpose() %>%
map(unlist, use.names = FALSE)
pos <- with(rle_id, cumsum(lengths)[values == "A"])
compt <- with(rle_id, lengths[values == "B"])
donnees$Comptage <- NA
donnees$Comptage[pos[seq(compt)]] <- compt
Code : Tout sélectionner
tab <- structure(list(ID = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L), Event = structure(c(1L, 1L, 2L, 2L, 2L,
1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L), .Label = c("A", "B"), class = "factor")), .Names = c("ID",
"Event"), class = "data.frame", row.names = c(NA, -15L))
Code : Tout sélectionner
tab$Comptage <- NA ## Ou la valeur que tu veux
colle <- paste(tab$Event, collapse = "")
gr <- gregexpr("AB", colle) ## On choppe l'index des transitions
rl <- rle(as.character(tab$Event)) ## On compte le nombre de répétitions
tab$Comptage[unlist(gr)] <- rl$lengths[rl$values == "B"]
Code : Tout sélectionner
> tab
ID Event Comptage
1 1 A NA
2 1 A 3
3 1 B NA
4 1 B NA
5 1 B NA
6 1 A 1
7 1 B NA
8 1 A 6
9 1 B NA
10 1 B NA
11 1 B NA
12 1 B NA
13 1 B NA
14 1 B NA
15 1 A NA
Code : Tout sélectionner
f <- function(dataframe){
dataframe$Comptage <- NA
colle <- paste(dataframe$Event, collapse = "")
gr <- gregexpr("AB+", colle)
dataframe$Comptage[unlist(gr)] <- attr(gr[[1]], "match.length") - 1
dataframe
}
Code : Tout sélectionner
bb <- by(df, df$ID, f)
do.call(rbind, bb)
Code : Tout sélectionner
> do.call(rbind,bb)
ID Event Comptage
1.1 1 A NA
1.2 1 A 3
1.3 1 B NA
1.4 1 B NA
1.5 1 B NA
1.6 1 A 1
1.7 1 B NA
1.8 1 A 6
1.9 1 B NA
1.10 1 B NA
1.11 1 B NA
1.12 1 B NA
1.13 1 B NA
1.14 1 B NA
1.15 1 A NA
2.16 2 B NA
2.17 2 A 2
2.18 2 B NA
2.19 2 B NA
2.20 2 A NA
2.21 2 A 1
2.22 2 B NA
2.23 2 A NA
2.24 2 A NA
2.25 2 A 2
2.26 2 B NA
2.27 2 B NA
2.28 2 A 1
2.29 2 B NA
2.30 2 A NA
Retourner vers « Questions en cours »
Utilisateurs parcourant ce forum : Google [Bot] et 1 invité