首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从所有请求的模式开始,列表中的列表按列的名称开始

从所有请求的模式开始,列表中的列表按列的名称开始
EN

Stack Overflow用户
提问于 2022-07-25 10:18:20
回答 1查看 57关注 0票数 0

我有一个具有不同列名的数据帧(L)的列表。我想要一个列表的子集,其中包含所有请求的列名,以A和B开头(A和B的顺序并不重要)。

代码语言:javascript
复制
L1 = data.frame(A1 = c(1:4) , Ab = c("u","v","w","x"))
L2 = data.frame(A2 = c(1:4) , Bc = c("u","v","w","x"))
L3 = data.frame(A3 = c(1:4) , Bd = c("u","v","w","x"))
L4 = data.frame(A = c(1:4) , B = c("u","v","w","x"))
L<-list(L1,L2, L3, L4)

结果应该是一个包含以A和B开头列的L2、L3和L4的列表。

下面的#######命令给出所有包含列的列表,它们以A或B开头,但不包含子集,这是一个只以A和B开头的列表。

代码语言:javascript
复制
lapply(L, function(x)   x[ , grepl( '^A|^B' , names(x))])

#######和该函数给出了具有确切请求的列名的列表,而不是以A和B开头的列。

代码语言:javascript
复制
trial <- function(x) 
{
  reqnames <- c('A', 'B')
  L <- lapply(L, function(x)   all(reqnames  %in% names(x)))
  L <- which(L==1)
  x[L]
}
 trial(L)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-25 10:52:10

试试这个:

代码语言:javascript
复制
new_list  <- lapply(L, \(x) x[
    all(
        any(grepl("^A", names(x))),
        any(grepl("^B", names(x)))
    )
]
)

这将返回一个空列表代替L1,并将L2的内容返回给L4

如果您不希望L1的列表为空,您可以再次对其进行子集:

代码语言:javascript
复制
new_list[sapply(new_list, length)>0]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73107569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档