r - 我可以使用 mutate() 和 across() 根据许多其他列来改变许多列吗?

标签 r dplyr across

我有一个数据集,其中许多列具有 NA 字符,因为它们依赖于另一个列响应。例如:

    df <- data.frame(X_home = c("Yes", "Yes", "No"), 
                     X_school = c("No", "Yes", "No"), 
                     Y_home = c("A", "B", NA), 
                     Y_school = c(NA, "A", NA))

如果我使用mutate(),我可以这样做:

df %>% mutate(Y_home = if_else(X_home == "No", "C", Y_home),
              Y_school = if_else(X_school == "No", "C", Y_school))

得到我想要的东西。但问题是我有很多 X_somethingY_something。所以我想用类似的东西来做:

df %>% mutate(across(starts_with("Y_"), ~ if_else(...))

可能吗?

非常感谢。

最佳答案

使用str_replace替换列名的子字符串(cur_column())后,我们可以获取对应列的值

library(dplyr)
library(stringr)
df %>%
   mutate(across(starts_with("Y_"),
    ~ case_when(get(str_replace(cur_column(), "Y_", "X_")) == "No" ~
       "C", TRUE ~ .x)))

-输出

 X_home X_school Y_home Y_school
1    Yes       No      A        C
2    Yes      Yes      B        A
3     No       No      C        C

关于r - 我可以使用 mutate() 和 across() 根据许多其他列来改变许多列吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72263741/

相关文章:

r - Dplyr cross + mutate + condition 选择列

r - 将数据框转换为 R 中的引用类对象

r - 为多组列动态创建行的替代(更快)方法

r - 将重叠的圆圈添加到具有均匀透明度的传单 map 中

r - 如何在R中识别跨年的添加/删除

r - 指定 dplyr 列名称

r - 在 R 中将二进制字符串转换为文本(Salesforce ID 转换 15 到 18)

r - 如何在数据框中相关地减去两列

r - 使用哪个包将 R 与 MongoDB 连接起来?

r - 将函数应用于 R 中的数据框列表