使用tidyverse合并两个向量

Nic*_*ick 1 r dplyr tidyr tidyverse

我有以下三个值.我想要做的是创建一个长度相同的向量lookup,其中NA元素的值为replace,而其余​​的元素在相应的位置给出值data.例如

lookup = c(NA, NA, 1, 2, NA, 3, NA)
data = c("user_3", "user_4", "user_6")
replace = "no_user_data"
Run Code Online (Sandbox Code Playgroud)

那么期望的输出将是: c("no_user_data", "no_user_data", "user_3", "user_4", "no_user_data", "user_6", "no_user_data")

这里的关键约束是我希望tidyverse尽可能地利用.我目前的解决方案如下:

data <- c(data, replace)
lookup[is.na(lookup)] <- length(data)
data <- data[lookup]
Run Code Online (Sandbox Code Playgroud)

我相信借助一些tidyverse魔法可以看起来好多了.谢谢!

Psi*_*dom 6

你可以使用dplyr::coalesce函数,它是一个很好的方法来替换向量中的缺失值:

dplyr::coalesce(data[lookup], replace)

# [1] "no_user_data" "no_user_data" "user_3"       "user_4"       "no_user_data"
# [6] "user_6"       "no_user_data"
Run Code Online (Sandbox Code Playgroud)

  • 基础R中的`pmax(data [lookup],replace,na.rm = TRUE)` (4认同)