在R

时间:2018-07-23 17:13:01

标签: r list

我有一个类似

的列表
places <- list(
  'cities-1' = c('Madrid', 'Valencia', 'Barcelona'),
  'countries-1' = c('España', 'Portugal', 'Francia'),
  'cities-2' = c('Alicante', 'San Sebastian', 'Lugo'),
  'countries-2' = c('Italia', 'Grecia', 'Alemania')
)

我想用其名称完成“城市”模式的那些元素创建一个新列表。如果可能的话,我想使用“ tidyverse”样式。

任何帮助将不胜感激。问候

1 个答案:

答案 0 :(得分:3)

使用grep中的base R更容易。通过检查grepl的{​​{1}}上的pattern个“城市”来获得names的逻辑索引,然后使用它来对list元素进行子集化

list

或与places[grepl("cities", names(places))] (而不是tidyverse一起使用,{grepl(来自str_detect)和stringr(来自keep){ 1}}个满足条件的元素

purrr

如评论中的@Frank所述,listlibrary(tidyverse) names(places) %>% str_detect('cities') %>% keep(places, .) 可能更便于分析

tbl

或者在data.frame

data_frame(nm = names(places), places) %>% 
     unnest %>% 
     filter(str_detect(nm, "cities"))