【发布时间】:2018-07-06 08:17:50
【问题描述】:
我有一个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), .)))
我尝试过的各种变体都失败了。
问题与Using functions of multiple columns in a dplyr mutate_at call 类似,但不同之处在于函数调用的第二个参数不是单列,而是vars 中每一列的不同列。
提前致谢。
【问题讨论】:
-
我现在正在做类似的事情。这与我之前的问题:stackoverflow.com/questions/47005763/… 中的问题相同,但在这种情况下,数据集太大以至于 RStudio 崩溃。
-
a
data.tableset循环可能是更快的方法之一。dplyr::coalesce的可读性可能会更好一些