Sélectionner n valeurs consécutives d'une colonne

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Morgane le Goff
Messages : 10
Enregistré le : 02 Nov 2017, 15:17

Sélectionner n valeurs consécutives d'une colonne

Messagepar Morgane le Goff » 15 Mai 2019, 18:45

Bonjour,


Je dispose d'un jeu de données qui a cette allure :


Day Colour Tank ID Trial Results Look Yes_no Latency Time
1 11/04/19 G 1 9_6 1 1 1 Y 1 280
2 11/04/19 G 1 9_6 2 NC 2 Y 2 NA
3 11/04/19 G 1 9_6 3 NC 3 N 3 NA
4 11/04/19 G 1 9_6 4 NC 4 Y 4 NA
5 11/04/19 G 1 9_6 5 1 5 Y 5 192



et dont la sortie est :


Code : Tout sélectionner

df<-structure(list(Day = structure(c(5L, 5L, 5L, 5L, 5L, 6L, 6L,
6L, 6L, 7L, 7L, 7L, 7L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 7L,
7L, 7L, 7L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L,
7L, 8L, 8L, 8L, 8L, 9L, 9L, 9L, 9L, 5L, 5L, 5L, 5L, 5L, 6L, 6L,
6L, 6L, 7L, 7L, 7L, 7L, 10L, 10L, 10L, 10L, 11L, 11L, 11L, 11L,
12L, 12L, 12L, 12L, 14L, 14L, 14L, 14L, 15L, 15L, 15L, 15L, 11L,
11L, 11L, 11L, 12L, 12L, 12L, 12L, 13L, 13L, 13L, 13L, 15L, 15L,
15L, 15L, 16L, 16L, 16L, 16L, 17L, 17L, 17L, 17L, 18L, 18L, 18L,
18L, 18L, 17L, 17L, 17L, 17L, 18L, 18L, 18L, 18L, 18L, 19L, 19L,
19L, 19L, 19L, 20L, 20L, 20L, 20L, 20L, 1L, 1L, 1L, 1L, 1L, 3L,
3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 20L, 20L, 20L, 20L, 20L,
1L, 1L, 1L, 1L, 1L, 3L, 3L, 3L, 3L, 3L, 21L, 21L, 21L, 21L, 21L,
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L), .Label = c("01/05/19",
"02/03/19", "02/05/19", "03/05/19", "11/04/19", "12/04/19", "13/04/19",
"16/04/19", "17/04/19", "18/04/19", "19/04/19", "20/04/19", "21/04/19",
"22/04/19", "23/04/19", "24/04/19", "25/04/19", "26/04/19", "29/04/19",
"30/04/19", "30/05/19"), class = "factor"), Colour = structure(c(2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("B",
"G"), class = "factor"), Tank = c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L), ID = structure(c(6L, 6L, 6L, 6L,
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 8L, 8L, 8L, 8L, 8L, 8L,
8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L,
8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 10L, 10L, 10L,
10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 7L,
7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L), .Label = c("11_5",
"12_1", "13_4", "14_2", "16_7", "9_6", "A_7", "B_5", "C_6", "P_2"
), class = "factor"), Trial = c(1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L,
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 1L, 2L,
3L, 4L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L,
1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L,
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L,
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L,
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L,
4L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 5L, 1L,
2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L,
3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L,
4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L,
5L, 1L, 2L, 3L, 4L, 5L), Results = structure(c(2L, 3L, 3L, 3L,
2L, 3L, 3L, NA, 3L, 3L, 3L, 3L, 3L, 2L, 2L, 2L, 1L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 1L, NA, NA, 3L, 3L, 2L, 2L, NA, 2L, 2L,
2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 3L, 2L, 2L, 3L,
3L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 2L, 2L,
3L, 2L, 2L, 1L, 3L, 3L, 3L, 3L, 2L, 2L, 2L, 3L, 1L, 2L, 2L, 1L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 2L,
3L, 3L, 3L, 3L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L,
2L, 3L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 2L, 2L, 3L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 3L, 3L, 1L, 3L,
1L, 1L, 2L, 3L, 3L, 1L, 1L, 1L, 3L, 1L), .Label = c("0", "1",
"NC"), class = "factor"), Look = c(1L, 2L, 3L, 4L, 5L, 1L, 2L,
3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 1L,
2L, 3L, 4L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L,
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 5L, 1L, 2L,
3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L,
3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L,
3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L,
3L, 4L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 5L,
1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L,
2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L,
3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L,
4L, 5L, 1L, 2L, 3L, 4L, 5L), Yes_no = structure(c(2L, 2L, 1L,
2L, 2L, NA, NA, NA, NA, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, NA, NA, NA, NA, 3L, NA, NA, NA,
2L, 2L, 2L, NA, NA, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
NA, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("N",
"Y", "Y2"), class = "factor"), Latency = structure(c(1L, 2L,
3L, 4L, 5L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 5L,
1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L,
4L, 5L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L,
3L, 4L, 5L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L,
2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L,
2L, 3L, 4L, 1L, 2L, 6L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L,
2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L,
1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L,
2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L,
3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L,
4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L), .Label = c("1",
"2", "3", "4", "5", "Y"), class = "factor"), Time = c(280L, NA,
NA, NA, 192L, NA, NA, NA, NA, NA, NA, NA, NA, 129L, 53L, 54L,
64L, 27L, 50L, 24L, 23L, 6L, 45L, 22L, 8L, 257L, 253L, NA, NA,
NA, NA, 265L, 100L, NA, 359L, 164L, 147L, 74L, NA, 597L, 119L,
170L, 185L, 169L, 725L, 296L, NA, NA, 136L, NA, 651L, 869L, 413L,
68L, 69L, 62L, 182L, 43L, 237L, 38L, 81L, 366L, 701L, 544L, NA,
155L, 143L, NA, NA, 300L, 47L, 81L, 522L, 374L, 623L, 489L, 130L,
83L, 30L, 32L, 25L, 108L, 715L, 771L, NA, 217L, 800L, 444L, NA,
NA, NA, NA, 505L, 218L, 411L, NA, 155L, 42L, 165L, 323L, 159L,
165L, 25L, 485L, 41L, 18L, 188L, 502L, 11L, 146L, NA, NA, NA,
NA, NA, 178L, NA, NA, NA, NA, 517L, 420L, 739L, 233L, 72L, 162L,
190L, 509L, 112L, 146L, 325L, 87L, 124L, NA, 75L, 88L, 420L,
NA, NA, NA, NA, 27L, 29L, NA, 172L, 16L, 23L, 8L, 65L, 13L, 8L,
1L, 11L, 16L, 332L, 3L, 45L, 96L, 41L, 496L, NA, NA, 376L, NA,
311L, 404L, 25L, NA, NA, 124L, 818L, 28L, NA, 844L)), .Names = c("Day",
"Colour", "Tank", "ID", "Trial", "Results", "Look", "Yes_no",
"Latency", "Time"), class = "data.frame", row.names = c(NA, -174L
))




J'aimerais pouvoir sélectionner les "ID" qui possèdent 8 chiffres 1 consécutifs dans la colonne "Results".
J'ai pensé à la commande "rle" mais je patauge un peu.

D'avance merci,

Morgane

Gabriel Terraz
Messages : 591
Enregistré le : 26 Sep 2011, 15:11

Re: Sélectionner n valeurs consécutives d'une colonne

Messagepar Gabriel Terraz » 15 Mai 2019, 19:12

Bonjour,

Une idée :

Code : Tout sélectionner

rl <- rle(paste(df$ID,df$Results, sep = "_"))

sup8 <- rl$values[rl$lengths >= 8]
sup8_1 <- grep("_1$", sup8, value = T)
sub("_1$","",sup8_1)
[1] "13_4" "C_6"

Morgane le Goff
Messages : 10
Enregistré le : 02 Nov 2017, 15:17

Re: Sélectionner n valeurs consécutives d'une colonne

Messagepar Morgane le Goff » 16 Mai 2019, 07:14

Bonjour,


Merci beaucoup c'est ce que je voulais, mais j'ai oublié de préciser que je dois exclure les "NC" des séries de 1 et faire comme s'ils n'étaient pas comptés. Donc B_5 devrait être compté comme ayant huit 1 consécutifs par exemple.


Merci!

Gabriel Terraz
Messages : 591
Enregistré le : 26 Sep 2011, 15:11

Re: Sélectionner n valeurs consécutives d'une colonne

Messagepar Gabriel Terraz » 16 Mai 2019, 07:59

Je suis pas sur du comportement que tu veux observer. Selon :

Sois tu supprimes toutes les lignes qui contiennt NC dans Resultts

Code : Tout sélectionner

df2 <- df[df$Results ! = "NC", ]



Ou tu transformes tes NC en 1 :

Code : Tout sélectionner

df$Results[df$Results == "NC"] <- "1"


J'ai bon ?

Morgane le Goff
Messages : 10
Enregistré le : 02 Nov 2017, 15:17

Re: Sélectionner n valeurs consécutives d'une colonne

Messagepar Morgane le Goff » 16 Mai 2019, 09:35

Bonjour,

Alors dans je dois sélectionner les individus qui ont eu 1 huit fois consécutives en ignorant les NC pour cette analyse mais j'aurais besoin des NC pour une autre analyse (voir s'il sont le plus souvent associés à des Y ou des N).
Donc si je transforme les NC en 1 ça ne va pas. Le 1 correspond ici à une réussite et le NC à une absence de choix.

Morgane le Goff
Messages : 10
Enregistré le : 02 Nov 2017, 15:17

Re: Sélectionner n valeurs consécutives d'une colonne

Messagepar Morgane le Goff » 16 Mai 2019, 09:37

Quand je supprime les NC avec la première solution, j'ai l'erreur suivante :

'!' inattendu(e) in "df2 <- df[df$Results!"

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Sélectionner n valeurs consécutives d'une colonne

Messagepar Pierre-Yves Berrard » 16 Mai 2019, 10:06

Bonjour,
Supprimer l'espace entre ! et =.
PY

Morgane le Goff
Messages : 10
Enregistré le : 02 Nov 2017, 15:17

Re: Sélectionner n valeurs consécutives d'une colonne

Messagepar Morgane le Goff » 16 Mai 2019, 11:09

Merci!
C'était bien ça.


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité