Niedawno szukałem porady, jak tłumić wszystkie, oprócz pierwszych wystąpień wartości w grupie, używając dplyr (dplyr override all but the first occurrences of a value within a group).dplyr tłumi kolejne n wystąpień wartości w grupie
Rozwiązanie było naprawdę sprytne, a teraz walczę ze znalezieniem czegoś równie skutecznego na wypadek, gdy muszę znieść tylko kolejne wartości.
na przykład w kodzie poniżej utworzyć nowy "tag" kolumna:
library('dplyr')
data(iris)
set.seed(1)
iris$tag <- sample(c(0,1), 150, replace=TRUE, prob = c(0.7, 0.3))
giris <- iris %>% group_by(Species)
# Source: local data frame [150 x 6]
# Groups: Species [3]
#
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species tag
# (dbl) (dbl) (dbl) (dbl) (fctr) (dbl)
# 1 5.1 3.5 1.4 0.2 setosa 0
# 2 4.9 3.0 1.4 0.2 setosa 0
# 3 4.7 3.2 1.3 0.2 setosa 0
# 4 4.6 3.1 1.5 0.2 setosa 1
# 5 5.0 3.6 1.4 0.2 setosa 0
# 6 5.4 3.9 1.7 0.4 setosa 1
# 7 4.6 3.4 1.4 0.3 setosa 1
# 8 5.0 3.4 1.5 0.2 setosa 0
# 9 4.4 2.9 1.4 0.2 setosa 0
# 10 4.9 3.1 1.5 0.1 setosa 0
# .. ... ... ... ... ... ...
W rzędach grupy setosa: 4, 6, 7, ... są oznaczone jako "1" s. Próbuję pomijać "1" (tj. Przekształcać je do "0") w następnych dwóch wierszach po wystąpieniu "1". Innymi słowy, wiersze # 5 i # 6 powinny być ustawione na "0", ale # 7 powinno pozostać nienaruszone. W tym przypadku wiersz # 7 ma wartość "1", więc wiersze # 8 i # 9 powinny być ustawione na "0" i tak dalej ...
Jakąkolwiek wskazówkę, jak to zrobić w dplyr? Pakiet ten jest naprawdę mocny, ale z jakiegoś powodu jest to wyzwanie umysłowe mi opanować wszystkie subtelności ...
Więcej przykładów: w przypadku: 0 0 1 1, wyjście powinno być 0 0 1 0 w przypadku: 0 0 1 1 1 1 1, wyjście powinno być 0 0 1 0 0 1 0
Tak więc, jeśli nie sekwencja 0 0 1 1 1 1 1, powinna zostać 0 0 1 0 0 1 0? – Frank
@ Frank Dokładnie, to jest oczekiwane wyjście – rpl