【问题标题】:Passing a vector through a select statement [duplicate]通过选择语句传递向量[重复]
【发布时间】:2020-02-21 19:49:04
【问题描述】:

寻求帮助以找到将字符串向量传递到 select 语句的方法。我想将数据框子集化为仅输出包含与我的向量相同的字符串的变量。我不希望它完全匹配,因此需要传递像 contains 这样的函数,因为数据框变量中有一些文本在我的向量中没有.

这是我想传递到我的选择语句中的向量示例。

c("clrs_name", "_clrs_sitedetails_value", "_clrs_targetlicence_value", 
"clrs_licenceclass", "clrs_licenceownership", "clrs_type", "statuscode")

例如,我想从我的数据框中提取变量“odate_value_clrs_name”,向量中的字符串“clrs_name”应该提取它,但我不确定如何将包含和向量合并到选择语句中。

【问题讨论】:

  • 如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。
  • 虽然不清楚您是否尝试匹配列名或列值。如果列名那么可能像这样的 dup 更合适:stackoverflow.com/questions/49460542/…
  • 您可以将pastecollapse="|" 传递给matchesselect 中,即library(dplyr);df1 %>% select(matches(str_c(v1, collapse = "|")))
  • matches 即使缺少某些元素也不会抛出错误
  • @akrun - 谢谢你的工作

标签: r select contains


【解决方案1】:

我们可以在select 中使用matchescollapse 使用| 通过paste 来自base Rstr_c 的模式向量之后使用str_c(如果有任何str_c 也会返回NA NA)。如果其中一个模式丢失或与列名不匹配,则不会返回任何错误或警告

library(dplyr)
library(stringr)
df1 %>%
     select(matches(str_c(v1, collapse = "|")))

在哪里

v1 <- c("clrs_name", "_clrs_sitedetails_value", "_clrs_targetlicence_value", 
  "clrs_licenceclass", "clrs_licenceownership", "clrs_type", "statuscode")

【讨论】:

    猜你喜欢
    • 2012-07-01
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    相关资源
    最近更新 更多