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魔法可以看起来好多了.谢谢!
你可以使用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)