尝试将多列与 mapply 组合会创建巨大的列表

Trying to combine multiple columns with mapply creates enormous list

在编程和 R 方面我有点菜鸟,如果这是一个愚蠢的问题,请多多包涵。

我有一个数据框,我想在其中将多对列组合成一个具有新名称的新列。

为此我有三个向量,两个包含我要合并的每一列的名称,一个包含新列的名称

假设我们有

df <- data.frame("col_a" = c("value", NA , "value", "value"),
"col_b" = c("value", "value", NA, NA),
"col_c" = c(NA, "value", NA, NA),
"col__d" = c(NA, NA, "value", "value"))

有了上面提到的向量就

vec_new <- c("col_e", "col_f")

vec_1 <- c("col_a", "col_b")

vec_2 <- c("col_c", "col_d")

我想过用这样的功能

fun <- function (x, y, z){mutate(df, x = coalesce(y, z))}

然后像这样使用 mapply 在我的数据框上使用它

df_new <- mapply(fun, x= vec_new, y= vec_1, z= vec_2)

我的预期是它基本上从 col_a 和 col_c 构建一个名为 col_e 的新列,然后在 vec_1 和 [=50] 中构建一个名为 col_e 的新列=],它确实如此,当我像这样为一对手动执行此操作时

df_new <- mutate(df, col_e = coalesce(col_a, col_c))

但是,我得到的是一个列表,当我将其转换为数据框时

df_new_2 <- as.data.frame(df_new)

给我 col_e 和 col_f 作为列,旧列作为行

如果我在我的实际数据帧上使用它,我会从大约 800 个变量增加到超过 120000 个。

这里发生了什么?我的 mapply 方法有问题吗?还是我只是在上面扔 as.data.frame 犯了一个愚蠢的错误?

非常感谢您的提示!

编辑: 我期望的是这样的

df_new <- data.frame("col_e" = c("value", "value", "value", "value"),
"col_f" = c("value", "value", "value", "value"),
"col_a" = c("value", NA , "value", "value"),
"col_b" = c("value", "value", NA, NA),
"col_c" = c(NA, "value", NA, NA),
"col__d" = c(NA, NA, "value", "value"))

你可以使用 mapply

df[vec_new] <- mapply(function(x, y) dplyr::coalesce(df[[x]], df[[y]]), vec_1, vec_2)

df
#  col_a col_b col_c col_d col_e col_f
#1 value value  <NA>  <NA> value value
#2  <NA> value value  <NA> value value
#3 value  <NA>  <NA> value value value
#4 value  <NA>  <NA> value value value