我有一个类似
的列表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”样式。
任何帮助将不胜感激。问候
答案 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所述,list
或library(tidyverse)
names(places) %>%
str_detect('cities') %>%
keep(places, .)
可能更便于分析
tbl
或者在data.frame
data_frame(nm = names(places), places) %>%
unnest %>%
filter(str_detect(nm, "cities"))