【发布时间】:2021-04-27 18:57:40
【问题描述】:
我有 2 个具有相同行和列结构的数据框,它们都有很多 NA 值。我想创建另一个数据框,它只是告诉我 2 个原始数据框中的哪些单元格实际上具有值。例如
到目前为止,我已经能够通过为每一列改变一系列 if else 语句来手动执行此操作,如下所示:
combined <- trial_1[,1:2] %>%
mutate("Part1" = ifelse(!is.na(trial_1$Part1) & !is.na(trial_2$Part1), "1 & 2",
ifelse(!is.na(trial_1$Part1) & is.na(trial_2$Part1), "1 only", ifelse(is.na(trial_1$Part1) & !is.na(trial_2$Part1),
"2 only", ifelse(is.na(trial_1$Part1) & is.na(trial_2$Part1),
"NA", "Failed"))))) %>%
mutate("Part2" = ifelse(!is.na(trial_1$Part2) & !is.na(trial_2$Part2),
"1 & 2",ifelse(!is.na(trial_1$Part2) & is.na(trial_2$Part2), "1 only",
ifelse(is.na(trial_1$Part2) & !is.na(trial_2$Part2), "2 only", ifelse(is.na(trial_1$Part2) & is.na(trial_2$Part2), "NA", "Failed"))))) %>%
mutate("Part3" = ifelse(!is.na(trial_1$Part3) & !is.na(trial_2$Part3), "1 & 2",
ifelse(!is.na(trial_1$Part3) & is.na(trial_2$Part3),
"1 only", ifelse(is.na(trial_1$Part3) & !is.na(trial_2$Part3), "2 only", ifelse(is.na(trial_1$Part3) & is.na(trial_2$Part3),
"NA", "Failed"))))) %>%
mutate("Part4" = ifelse(!is.na(trial_1$Part4) & !is.na(trial_2$Part4),
"1 & 2", ifelse(!is.na(trial_1$Part4) & is.na(trial_2$Part4), "1 only", ifelse(is.na(trial_1$Part4) & !is.na(trial_2$Part4),
"2 only", ifelse(is.na(trial_1$Part4) & is.na(trial_2$Part4), "NA", "Failed")))))
但这显然效率不高,所以我尝试使用 for 循环,但不起作用:
participants <- list('Part1', 'Part2', 'Part3', 'Part4')
combined <- trial_1[,1:2]
for (i in participants) {
combined <- combined %>%
mutate(i = ifelse(!is.na(trial_1$i) & !is.na(trial_2$i), "1 & 2",
ifelse(!is.na(trial_1$i) & is.na(trial_2$i), "1 only",
ifelse(is.na(trial_1$i) & !is.na(trial_2$i), "2 only",
ifelse(is.na(trial_1$i) & is.na(trial_2$i), "NA", "Failed")))))
}
任何关于如何重组这个 for 循环的帮助,我认为这是要走的路,都会非常有帮助。谢谢!
【问题讨论】:
标签: r dataframe for-loop if-statement