【问题标题】:subset all dataframes in a list based on dynamic conditions根据动态条件对列表中的所有数据框进行子集化
【发布时间】:2017-08-06 21:53:25
【问题描述】:

我有一个名为“maxDF”的数据框

factor max_condition
A       7
B       4
C       6

我有一个名为“我的列表”的列表,其中包含多个共享相同变量(列名)的数据框:

mylist <- c('A', 'B', 'C', etc)

数据框结构示例

mylist$A
factor condition
A            0
A            3
A            6
A            7
A            8
A            9

mylist$B
factor condition
B            0
B            1
B            2
B            3
B            4
B            5

我想根据取自 maxDF 的条件通过动态条件对这些数据帧进行子集化

我可以为每个数据框手动制作如下

conditionA = maxDF$max_condition[maxDF$factor=='A']
filter(mylist$A, condition<=conditionA)

A
factor condition
A            0
A            3
A            6
A            7

我想问一下是否有任何方法可以自动对列表“mylist”中的所有数据帧进行子集化,而不是一一进行,因为我在实际列表中有 99 个数据帧。

我期待听到您的见解。

致以诚挚的问候,

【问题讨论】:

    标签: r


    【解决方案1】:

    您只需使用lapply 稍微修改您的代码即可使其正常工作:

    mylist2 = lapply(mylist, function(x) {
    m = maxDF[maxDF$factor==unique(x$factor),]$max_condition;
    x[x$condition<=m,] })
    

    这会返回:

    $A
      factor condition
    1      A         0
    2      A         3
    3      A         6
    4      A         7
    
    $B
      factor condition
    1      B         0
    2      B         1
    3      B         2
    4      B         3
    5      B         4
    

    【讨论】:

      【解决方案2】:
      lapply(1:nrow(maxDF), function(i) filter(mylist[[i]], condition < maxDF[i,2]) )
      

      应该做的工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-15
        • 2022-06-18
        • 2014-02-20
        • 1970-01-01
        • 1970-01-01
        • 2015-11-27
        • 2013-04-22
        • 1970-01-01
        相关资源
        最近更新 更多