【发布时间】:2018-05-04 06:44:19
【问题描述】:
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 方法,最终我可以在每个组、大型数据集等上执行此操作。
有什么想法吗?
【问题讨论】:
标签: r