【发布时间】:2021-02-18 04:00:53
【问题描述】:
我正在尝试将多个列中为 NA 的变量值设置为不同但名称相似的列中的值。我想知道这是否可以使用 dplyr。
例如,假设我有以下数据框:
x <- tribble(~x_var1, ~x_var2, ~y_var1, ~y_var2,
5, 2, 0, 0,
NA, 10, 8, 0,
3, NA, 0, 5,
NA, NA, 7, 9)
我想将x_var1 和x_var2 中的NA 值替换为y_var1 和y_var2 中的相应值。我的数据集有两个以上这样的列,所以我想知道是否有一种巧妙的方法可以使用 mutate(across(...)) 或其他 dplyr 操作来做到这一点。
我的尝试如下:
x %>%
mutate(across(c(x_var1, x_var2),
~ ifelse(is.na(.), paste0("y_", str_remove(., "x_")), .))) # if NA replace with y_(varname)
但这当然行不通,因为paste 和str_remove 函数没有对变量名进行操作。
提前致谢!
(编辑:我想我可以使用 pivot_longer / pivot_wider 但我很好奇是否有其他解决方案。)
【问题讨论】:
-
我找到了以下线程:stackoverflow.com/questions/61903103/… 这导致了我这个解决方法 - x %>% mutate(across(c(x_var1, x_var2), ~ifelse(is.na(.), pull (x, paste("y_", str_remove(cur_column(), "x_"), sep = "")), .))) 不过很高兴听到其他建议。