Ich habe folgenden Datenrahmen mit , und NA s für IDs A einen Zeitraum von einem Jahr bis E über:Count Zahlenfolgen zeilenweise
dat <- data.frame(
id = c("A", "B", "C", "D", "E"),
jan = c(0, 0, NA, 1, 0),
feb = c(0, 1, 1, 0, 0),
mar = c(0, 0, 1, 0, 1),
apr = c(0, NA, 0, NA, 1),
may = c(0, NA, 0, 0, 0),
jun = c(0, 0, 0, 0, 0),
jul = c(0, 0, 0, 0, 1),
aug = c(NA, 0, 0, 1, 1),
sep = c(NA, 0, 0, 1, NA),
okt = c(NA, 0, 0, 0, NA),
nov = c(NA, 0, 0, 0, 1),
dez = c(NA, 0, 0, 0, 0)
)
> dat
id jan feb mar apr may jun jul aug sep okt nov dez
A 0 0 0 0 0 0 0 NA NA NA NA NA
B 0 1 0 NA NA 0 0 0 0 0 0 0
C NA 1 1 0 0 0 0 0 0 0 0 0
D 1 0 0 NA 0 0 0 1 1 0 0 0
E 0 0 1 1 0 0 1 1 NA NA 1 0
Ich mag zählen das erste Auftreten eines 1 wird immer als 1 0.123.516 gezählt
- : die Anzahl der 1s für jede ID über diesen Zeitraum von einem Jahr, aber die folgenden Bedingungen müssen erfüllt sein
- NAs sollte als 0s
- Ein zweites Auftreten eines 1 wird nur gezählt, behandelt werden, wenn sie durch sechs oder mehr 0s/NAs
In meinem Beispiel vorangeht, würde der Graf sein:
> dat
id jan feb mar apr may jun jul aug sep okt nov dez count
1 A 0 0 0 0 0 0 0 NA NA NA NA NA => 0
2 B 0 1 0 NA NA 0 0 0 0 0 0 0 => 1
3 C NA 1 1 0 0 0 0 0 0 0 0 0 => 1
4 D 1 0 0 NA 0 0 0 1 1 0 0 0 => 2
5 E 0 0 1 1 0 0 1 1 NA NA 1 0 => 1
Die Funktion sollte rowwise in Form von apply(dat[, -1], 1, my_fun)
angewendet werden und einen Vektor zurückgeben, der die Anzahl enthält (dh 0, 1, 1, 2, 1
). Hat jemand eine Idee, wie man das erreicht?
Können Sie 3 oder 4 oder mehr in einer Reihe haben, die die Bedingungen erfüllen? Oder ist die Anzahl der Spalten, die Sie festgelegt haben, um nur ein Muster zu haben – Sotos
Nein, es gibt immer 12 Spalten. Also ist die maximale Anzahl 2 (es kann nur eine Folge von 6 0 nach einer 1 geben). – piptoma
In Bezug auf Ihre Bearbeitung: Sie können einige der Antworten unten leicht verwenden, um Ihre bearbeitete Frage zu lösen. Einige von ihnen arbeiten bereits mit mehr als sechs Nullen vor der 1. Und die Lösung von NAs ist am einfachsten, wenn NA an den entsprechenden Stellen durch Nullen ersetzt wird. Zum Beispiel 'dat [is.na (dat)] <- 0 'am Betteln oder' y [is.na (y)] <- 0' in meiner Antwort. – demirev