Hier ist ein Beispiel Datenrahmen, die eine größere Datenmenge entspricht:eine Sequenz umfasst NA-Wert
Day <- c(1, 2, NA, 3, 4, NA, NA, NA, NA, NA, 1, 2, 3, NA, NA, NA, NA, 1, 2, NA, NA, 3, 4, 5)
y <- rpois(length(Day), 2)
z <- seq(1:length(Day)) + 500
df <- data.frame(z, Day, y)
Wenn es eine Folge von 4 oder mehr fehlenden Werten (NAs) in der Tag-Säule, daß Sequenz repräsentiert eine Lücke zwischen den Kohorten in der Studie. Wenn weniger als 4 NAs in einer Sequenz vorhanden sind, wird der fehlende Wert immer noch als Teil der Kohorte betrachtet (z. B. ist Zeile 3 Teil von Kohorte 1, aber Zeile 8 nicht). Im Beispieldatenrahmen gibt es 3 Kohorten (Kohorte 1: Reihen 1-5, Kohorte 2: Reihen 11-13 und Kohorte 3: Reihen 18-24). Ich möchte eine Spalte hinzufügen, in der die Kohortennummer und eine weitere Spalte mit dem Kohortenstudiestag aufgelistet sind. Hier ist der Code, den ich verwendet habe:
require(dplyr)
CheckNA <- rle(is.na(df$Day))
CheckNA$values <- CheckNA$lengths >= 4 & CheckNA$values == 1
ListNA <- rep(CheckNA$values, CheckNA$lengths)
df$Co <- rep(c(1, NA, 2, NA, 3), rle(ListNA)$lengths) %>% as.factor()
df <- df %>%
group_by (Co) %>%
mutate(CoDay = seq(Co)) %>%
as.data.frame()
df$CoDay <- ifelse(is.na(df$Co), NA, df$CoDay)
Gibt es eine effizientere Möglichkeit, diese Aufgabe zu erfüllen? Ich suche speziell nach Code, um die Kohortenummer nicht auflisten zu müssen, da mein aktueller Datensatz über 10 Kohorten enthält. Ich liste gerade die Reihenfolge auf, die wiederholt werden sollte: c (1, NA, 2, NA, 3).
Vielen Dank!
Dieses an Code Review Quer gebucht wurde: http://codereview.stackexchange.com/questions/160059/r-code-to-count-a-sequence-of-cohort-studies –
Ich habe es aus der Code Review entfernt. –