df <- data.frame(a = c(rep("a", 3), rep("b", 3), rep("c", 3)),
b = c(NA, NA, "test", NA, "test", "test", NA, NA, "test"),
c = c("trial", "test", "trial", "trial", "test", "trial", "trial",
"trial", "trial"), stringsAsFactors = FALSE)
Допустим, df содержит три переменные - 1 группа (a), 1 b-значение и 1 c-значение.
Я хочу найти для каждой строки значение в столбце c, соответствующее последнему отсутствующему значению в столбце b.
Мой ожидаемый вывод - это то, что находится в столбце try.
+---------------------+
| try a b c |
+---------------------+
| trial a NA trial |
| test a NA test |
| test a test trial |
| trial b NA trial |
| trial b test test |
| trial b test trial |
| trial c NA trial |
| trial c NA trial |
| trial c test trial |
+---------------------+
В настоящее время я делаю быстрый, но неэффективный цикл, который также не позволяет мне что-либо группировать.
miss <- c()
try <- c()
for (i in 1:length(df$b)) {
miss[i] <- max(which(is.na(df[1:i,]$b)))
try[i] <- df[miss[i], 3]
}
new <- cbind(as.data.frame(try), df)
Однако я хотел бы превратить это в подход data.table или dplyr, где я мог бы в конечном итоге выполнить эту операцию также для каждой группы, для большого набора данных и т. Д.
Есть идеи?