【问题标题】:R - How to subset all dataframes stored in a list according to a vector of conditionsR - 如何根据条件向量对存储在列表中的所有数据帧进行子集化
【发布时间】:2025-12-22 00:30:10
【问题描述】:

这是我第一次在这里提问,所以如果我需要改变我这样做的方式,请告诉我。我已经找了一段时间了,但我找不到我需要的东西。

我有一个包含 3 个数据框的列表。它们具有相同的结构(变量),但观察次数不同。我想根据存储在向量中的几个条件,为列表中的每个数据帧获取几个子集。

因此,如果我有 5 个条件,我需要为列表中的 3 个数据帧中的每一个获取这些数据帧的 5 个子集,因此总共 15 个。

例如:

df1 <-data.frame(replicate(3,sample(0:10,10,rep=TRUE)))
df2 <-data.frame(replicate(3,sample(0:10,7,rep=TRUE)))
df3 <-data.frame(replicate(3,sample(0:10,8,rep=TRUE)))

my_list <- list(df1, df2, df3)

conditions <- c(2, 5, 7, 4, 6)

我知道如何使用 lapply 对其中一种条件进行子集化

list_subset <- lapply(my_list, function(x) x[which(x$X1 == conditions[1]), ])

但我想对向量条件中的所有值都这样做。 我希望这是有道理的。

【问题讨论】:

    标签: r dataframe lapply


    【解决方案1】:

    再次申请,这次是在条件上:

    df1 <-data.frame(replicate(3,sample(0:10,10,rep=TRUE)))
    df2 <-data.frame(replicate(3,sample(0:10,7,rep=TRUE)))
    df3 <-data.frame(replicate(3,sample(0:10,8,rep=TRUE)))
    
    my_list <- list(df1, df2, df3)
    
    conditions <- c(2, 5, 7, 4, 6)
    
    list_subset <- lapply(my_list, function(x) x[which(x$X1 == conditions[1]), ])
    
    #One Way, Conditions on first list
    list.of.list_subsets <- lapply(conditions,function(y){
      lapply(my_list, function(x) x[which(x$X1 == y), ])
    })
    #The other way around
    list.of.list_subsets2 <- lapply(my_list,function(x){
      lapply(conditions, function(y) x[which(x$X1 == y), ])
    })
    

    【讨论】:

      【解决方案2】:

      一种选择是使用%in% 过滤,然后根据“X1”列使用split

      lapply(my_list, function(x) {x1 <- subset(x, X1 %in% conditions); split(x1, x1$X1)})
      

      【讨论】:

      • 感谢您的提示!