我有一个data.frame
,其中有许多列的名称遵循一定的模式。例如:
df <- data.frame(
x_1 = c(1, NA, 3),
x_2 = c(1, 2, 4),
y_1 = c(NA, 2, 1),
y_2 = c(5, 6, 7)
)
我希望使用
mutate_at
在每一对列上执行相同的操作,就像这样:df %>%
mutate(
x = ifelse(is.na(x_1), x_2, x_1),
y = ifelse(is.na(y_1), y_2, y_1)
)
请问我能用mutate_at
/mutate_each
来实现这个吗?
以下是内容:
df %>%
mutate_each(vars(x_1, y_1), funs(ifelse(is.na(.), vars(x_2, y_2), .)))
我尝试了各种不同的变化,但都失败了。
这个问题类似于在dplyr mutate_at调用中使用多列函数,但不同之处在于函数调用的第二个参数不是单独的一列,而是vars中每一列对应的不同列。
提前感谢您的帮助。
data.table
的set
循环可能是做这件事情最快的方法之一。dplyr::coalesce
也许更易读一些。 - zacdav