Sto lavorando con una serie di sequenze VERO e FALSO organizzate per gruppo e che si estendono su un intervallo di tempo (ad esempio giorni). Di seguito, ho avuto il tempo di ricreare un esempio e convertire lo data.frame
in un data.table
utilizzando il pacchetto data.table
.Trova l'ultima riga in una sequenza di valori consecutivi
> dput(df)
structure(list(day = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L,
4L, 5L, 6L, 7L), group = structure(c(1L, 1L, 1L, 1L, 1L, 1L,
1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("a", "b"), class = "factor"),
condition = structure(c(1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L,
2L, 1L, 1L, 2L, 2L), .Label = c("FALSE", "TRUE"), class = "factor")), .Names = c("day",
"group", "condition"), row.names = c(NA, -14L), class = "data.frame")
> library(data.table)
> df <- as.data.table(df)
> setkey(df, group)
> df
day group condition
1: 1 a FALSE
2: 2 a FALSE
3: 3 a TRUE
4: 4 a TRUE
5: 5 a TRUE
6: 6 a FALSE
7: 7 a FALSE
8: 1 b FALSE
9: 2 b TRUE
10: 3 b TRUE
11: 4 b FALSE
12: 5 b FALSE
13: 6 b TRUE
14: 7 b TRUE
Utilizzando data.table
, so come selezionare il primo giorno per ogni gruppo in cui condizione è uguale a "TRUE":
> df[condition == "TRUE", day[1], by = group]
group V1
1: a 3
2: b 2
> df
day group condition
1: 1 a FALSE
2: 2 a FALSE
3: 3 a TRUE <~~~~~~~~
4: 4 a TRUE
5: 5 a TRUE
6: 6 a FALSE
7: 7 a FALSE
8: 1 b FALSE
9: 2 b TRUE <~~~~~~~~
10: 3 b TRUE
11: 4 b FALSE
12: 5 b FALSE
13: 6 b TRUE
14: 7 b TRUE
Quello che vorrei realizzare è un output finale che identifica la ultima riga per la prima sequenza di ciascun gruppo in cui la condizione è uguale a "VERO". Si prega di vedere la mia uscita di seguito:
group V1
1: a 5
2: b 3
> df
day group condition
1: 1 a FALSE
2: 2 a FALSE
3: 3 a TRUE
4: 4 a TRUE
5: 5 a TRUE <~~~~~
6: 6 a FALSE
7: 7 a FALSE
8: 1 b FALSE
9: 2 b TRUE
10: 3 b TRUE <~~~~~
11: 4 b FALSE
12: 5 b FALSE
13: 6 b TRUE
14: 7 b TRUE
Qualsiasi consigli, suggerimenti, o altro materiale sarebbe molto apprezzato. Grazie per il vostro tempo e sentitevi liberi di fare qualsiasi domanda di chiarimento!
Ho corretto/aggiornato il mio codice per estrarre solo il primo. – MrFlick
lo hai fatto di nuovo! Grazie mille per il tuo tempo. Ho sicuramente bisogno di esplorare più approfonditamente la funzione 'diff'! – ccapizzano