【发布时间】:2020-02-27 04:49:24
【问题描述】:
我正在尝试使用 ifelse 语句和 mutate_all 函数自动化流程以完成一系列变量的缺失值。该问题涉及具有许多变量名称的数据框,例如 ax1、bx1、...zx1、ax2、bx2、...zx2、ax3、bx3、...zx3。以下数据给出了一个小场景:
df<-data.frame(
"id" = c(1:5),
"ax1" = c(1, "NA", 8, "NA", 17),
"bx1" = c(2, 7, "NA", 11, 12),
"ax2" = c(2, 1, 8, 15, 17),
"bx2" = c(2, 6, 4, 13, 11))
该过程是将带有结尾“x1”的变量上的缺失值替换为带有结尾“x2”的变量上的对应值。也就是说,如果 ax1 缺失,则将其替换为 ax2,并且 bx1 上的任何缺失都将替换为 bx2,依此类推。由于存在比这里介绍的场景更多的变量,我正在寻找一种方法来自动化这个过程。我尝试了以下代码
library(dplyr)
df <- df %>%
mutate_all(vars(ends_with("x1", "x2")), function(x,y)
ifelse(is.na(x), y, x)))
但它不起作用。我非常感谢这方面的任何帮助。 预期的输出是
id ax1 bx1 ax2 bx2
1 1 2 2 2
2 1 7 1 6
3 8 4 8 4
4 15 11 15 13
5 17 12 17 11
【问题讨论】:
-
ax2和ax3中的缺失值怎么办?他们被替换了吗?或者您只想替换ax1中的缺失值? -
@RonakShah 谢谢! ax2 和 ax3 中的缺失值不会被替换。我想替换以 x1 结尾的变量的缺失值,例如ax1 和 bx1。
-
您的失踪并不是真正失踪,因为您在 NA 周围有引号。您不需要在 NA 或列名周围加上引号,例如“id”应该只是数据框创建位中的id