在dplyr中使用starts_with,其中包含部分列名称的向量

时间:2017-02-08 22:43:08

标签: r dplyr

我想使用dplyr来选择与字符串向量匹配的某些列。

one <- seq(1:10)
two <- rnorm(10)
three <- runif(10, 1, 2)
four <- -10:-1

df <- data.frame(one, two, three, four)

vars <- c('on', 'thr')

我想只选择df中标题以&#39; on&#39;开头的列。或者&#39; thr&#39;:

dplyr::select_(df, starts_with(vars))

但是,上述方法无效。

3 个答案:

答案 0 :(得分:2)

dplyr中的各种选择辅助函数意味着只需要一个字符串进行匹配。您可以通过将字符串组合成一个正则表达式并使用matches

来解决此问题
vars <- paste0("^(", paste(vars, collapse="|"), ")")
select(df, matches(vars))

答案 1 :(得分:1)

以下是使用$re = '/\[image\sid\=\"(\d+?)\"\]/'; $str = 'This is a regular test string with [image id="1"] within this sentence. The next sentence (this one) will contain another bbCode tag, [image id="3"].'; preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0); 的解决方案:

starts_with

基本上,我们的想法是使用df %>% select(map(c('on', 'thr'), starts_with, vars = colnames(.)) %>% unlist()) starts_with函数应用于名称向量。 但要使其工作,必须添加参数map(列名列表),然后取消列出vars的结果以获取位置向量。

此解决方案将Chrisss扩展为至少有一个条目存在多个匹配项的情况。

答案 2 :(得分:0)

大概你提前知道,因为你正在编码,你想要的列名匹配,所以你可以使用

select(starts_with("on"), starts_with("thr"))

啊,我看到Tony Ladson essentiall已经建议过了。但是,根据您的具体用例,我认为不需要从矢量中获取它们。