我有一个像
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')
)
Run Code Online (Sandbox Code Playgroud)
我想创建一个新列表,其中包含名称完成“城市”模式的那些元素。如果可能的话,我想使用“tidyverse”风格。
任何帮助,将不胜感激。问候
使用grepfrom更容易base R。获取逻辑指数与grepl通过检查pattern“城市”对names的list,然后用它来子集list元素
places[grepl("cities", names(places))]
Run Code Online (Sandbox Code Playgroud)
或 with tidyverse,而不是grepl,使用str_detect(from stringr) 和keep(from purrr)list满足条件的元素
library(tidyverse)
names(places) %>%
str_detect('cities') %>%
keep(places, .)
Run Code Online (Sandbox Code Playgroud)
正如@Frank 在评论中提到的, a tblordata.frame可能更便于分析
data_frame(nm = names(places), places) %>%
unnest %>%
filter(str_detect(nm, "cities"))
Run Code Online (Sandbox Code Playgroud)
或者在 base R
subset(stack(places), grepl("cities", ind))
Run Code Online (Sandbox Code Playgroud)