Ecco un modo con dplyr
. Non sono sicuro che lo ATRSLBL
sia un carattere o un fattore. La mia ipotesi è che sia un fattore. Innanzitutto, ho convertito ATRSLBL
in caratteri. Quindi, ho sostituito i duplicati Red
e Blue
con ""
. Ho anche creato una variabile di gruppo utilizzando cumsum()
nella prima parte di mutate()
. Utilizzando la variabile di gruppo, ho raggruppato i dati e applicato replace()
per CENTRE
. Qui, sto dicendo a R se il numero di riga di ogni gruppo non è 1, sostituire qualsiasi carattere a ""
. Quindi, mantieni le informazioni nella prima riga di ogni gruppo. Quindi, si separano i dati e si elimina la variabile di gruppo utilizzando select()
. Spero che questo ti possa aiutare.
library(dplyr)
mutate(mydf,
ATRSLBL = replace(as.character(ATRSLBL), which(duplicated(ATRSLBL) == TRUE), ""),
group = cumsum(c(T, abs(diff(CENTRE)) > 1))) %>%
group_by(group) %>%
mutate(CENTRE = replace(CENTRE, which(row_number(CENTRE) != 1), "")) %>%
ungroup %>%
select(-group)
# ATRSLBL POPUL CENTRE BAGE BAGEC1 SEX
# (chr) (fctr) (chr) (int) (int) (int)
#1 Red PPS 37201 75 3 1
#2 PPS 71 2 2
#3 PPS 73 2 1
#4 PPS 38201 66 2 2
#5 Blue PPS 37201 78 3 2
#6 PPS 38201 71 2 2
#7 PPS 71 2 1
#8 PPS 64 1 2
DATI
mydf <- structure(list(ATRSLBL = structure(c(2L, 2L, 2L, 2L, 1L, 1L,
1L, 1L), .Label = c("Blue", "Red"), class = "factor"), POPUL = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "PPS", class = "factor"),
CENTRE = c(37201L, 37201L, 37201L, 38201L, 37201L, 38201L,
38201L, 38201L), BAGE = c(75L, 71L, 73L, 66L, 78L, 71L, 71L,
64L), BAGEC1 = c(3L, 2L, 2L, 2L, 3L, 2L, 2L, 1L), SEX = c(1L,
2L, 1L, 2L, 2L, 2L, 1L, 2L)), .Names = c("ATRSLBL", "POPUL",
"CENTRE", "BAGE", "BAGEC1", "SEX"), class = "data.frame", row.names = c(NA,
-8L))
Hi akrun, grazie per il vostro aiuto. Potete per favore dare l'esempio solo per la variabile ATRSLBL. Mi aiuterà a capire meglio –