我想使用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))
但是,上述方法无效。
答案 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已经建议过了。但是,根据您的具体用例,我认为不需要从矢量中获取它们。