dplyr::coalesce 跳过 R 中不存在的值

dplyr::coalesce skip non-existent values in R

提问人:shizzle 提问时间:7/27/2023 最后编辑:Darren Tsaishizzle 更新时间:7/27/2023 访问量:52

问:

在这种情况下,是否真的可以跳过不存在的值,例如 colnames?(例如 不存在dplyr::coalesce()col2data)

data %>%
  mutate(
    var_1 = coalesce(col1, col2,...,coln),
    var_n = ...)

谢谢

R 数据帧 dplyr 合并

评论

0赞 Maël 7/27/2023
请添加一个可重现的例子。您可以使用内置数据集,例如 举第一个例子来说明你尝试过什么。cars

答:

2赞 Darren Tsai 7/27/2023 #1

您可以预先将所有可能的列名存储到字符向量中,然后用于选择列。如果某些列名不存在,将跳过它们。any_of()any_of()

library(dplyr)

vars <- paste0("col", 1:10)
# [1] "col1"  "col2"  "col3"  "col4"  "col5"  "col6"  "col7"  "col8"  "col9"  "col10"

data %>%
  mutate(
    var_1 = do.call(coalesce, pick(any_of(vars)))
  )

如果 to 是按顺序排列的,您可以简单地用于选择位于左侧和右侧之间的变量。col1colncol1:colncol1coln

data %>%
  mutate(
    var_1 = do.call(coalesce, pick(col1:col10))
  )

评论

2赞 Maël 7/27/2023
另一种选择是 .请参阅此处进行讨论coalesce(!!!select(., any_of(vars)))
0赞 Darren Tsai 7/27/2023
@Maël 太棒了!实际上,我只是感到困惑,为什么不起作用。在您提供的链接中也对此进行了讨论。coalesce(!!!pick(any_of(vars)))
0赞 shizzle 8/3/2023
很抱歉这么晚才回复,但你的例子抛出了Error in UseMethod("mutate") : no applicable method for 'mutate' applied to an object of class "function" >
0赞 Darren Tsai 8/3/2023
@shizzle 当你测试我的代码时,你应该用你的真实数据对象替换。data
0赞 shizzle 8/3/2023
啊,现在还为时过早,对不起。它现在实际上适用于我的数据。谢谢。