使用 tidyverse 合并两个向量
merge two vectors using 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"
所需的输出将是: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
魔法的帮助下看起来会好很多。谢谢!
您可以使用 dplyr::coalesce
函数,这是在向量中 replace missing values 的好方法:
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"
我们还可以使用 replace
来自 base 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"
我有以下三个值。我想要做的是创建一个与 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
魔法的帮助下看起来会好很多。谢谢!
您可以使用 dplyr::coalesce
函数,这是在向量中 replace missing values 的好方法:
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"
我们还可以使用 replace
来自 base 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"