提问人:shizzle 提问时间:7/27/2023 最后编辑:Darren Tsaishizzle 更新时间:7/27/2023 访问量:52
dplyr::coalesce 跳过 R 中不存在的值
dplyr::coalesce skip non-existent values in R
问:
在这种情况下,是否真的可以跳过不存在的值,例如 colnames?(例如 不存在dplyr::coalesce()
col2
data
)
data %>%
mutate(
var_1 = coalesce(col1, col2,...,coln),
var_n = ...)
谢谢
答:
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 是按顺序排列的,您可以简单地用于选择位于左侧和右侧之间的变量。col1
coln
col1:coln
col1
coln
data %>%
mutate(
var_1 = do.call(coalesce, pick(col1:col10))
)
评论
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
啊,现在还为时过早,对不起。它现在实际上适用于我的数据。谢谢。
评论
cars