1

我有以下三个值。我想要做的是创建一个长度与 相同的向量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"

所需的输出将是: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]

我相信在一些tidyverse魔法的帮助下看起来会好很多。谢谢!

4

2 回答 2

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"
于 2016-12-15T00:47:43.227 回答
2

我们也可以使用replacefrombase R

replace(data[lookup], is.na(lookup), replace)
#[1] "no_user_data" "no_user_data" "user_3"       "user_4"       "no_user_data"
#[6] "user_6"       "no_user_data"
于 2016-12-15T02:50:20.040 回答