【问题标题】:merge two vectors using tidyverse使用 tidyverse 合并两个向量
【发布时间】:2016-12-15 00:41:16
【问题描述】:

我有以下三个值。我要做的是创建一个与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 魔术的帮助下看起来会好很多。谢谢!

【问题讨论】:

  • 如果你问我tidyverse 应该是问题的答案,而不是问题本身。你有什么特别的理由想要这样做吗?
  • @mpjdem - 我曾经看到有人建议使用 add subtract 等功能,这样您就可以使用 1 %&gt;% add(2) 并获得 3 。我们还没有达到顶峰。
  • @thelatemail 喜欢1 %&gt;% `+`(2)(或1 %&gt;% "+"(2)

标签: r dplyr tidyr tidyverse


【解决方案1】:

您可以使用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"

【讨论】:

  • pmax(data[lookup], replace, na.rm=TRUE) in base R.
【解决方案2】:

我们也可以使用base R中的replace

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"

【讨论】:

    猜你喜欢
    • 2018-01-21
    • 2021-10-10
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 2015-06-11
    • 2021-11-12
    • 2014-04-17
    • 1970-01-01
    相关资源
    最近更新 更多