按名称选择列表中的元素

时间:2018-10-23 18:14:56

标签: r regex list subset

我试图选择列表中所有具有类似于字符串名称的元素。

x <- list('not_bob' = list(1,2,3), 'bob' = list(1,4,5), 'Al' = '1', 'Ally' = '3')

e <- x[names(x) %in% c('bob', '%Al%')]

所需的输出:

e包含bobAlAlly

2 个答案:

答案 0 :(得分:0)

您应该使用正则表达式。在R中,可以使用grepl函数来完成此操作:

e <- x[grepl("^bob$|^Al.*$", names(x))]

|分隔不同的字符串,^表示字符串的开头,$-字符串的结尾,.*表示任意数量的任何符号。如果您的需求更复杂,则可能需要更多地研究正则表达式。

答案 1 :(得分:0)

如果您对正则表达式不满意(这是可以理解的!),则可以继续使用“普通通配符”。要使用已显示的SQL模式,需要进行一些翻译,因此,我建议您稍加改用通配符或通配符。

例如,您在SQL中的"%Al%"等效于:

  • 通配符:"*Al*"
  • regex:glob2rx("*Al*")-> "^.*Al"({{1}之后不需要任何东西,因为regex有点缺乏限制...与Al进行比较)差异)

尝试一下:

glob2rx("*Al")