2017-08-06 39 views
1

我稱之爲一個數據幀「maxDF」子集列表中的所有dataframes基於動態條件

factor max_condition 
A  7 
B  4 
C  6 

我有一個名爲「我的名單」包含幾個dataframes共享相同的變量(列名)列表:數據幀結構的

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 

欲子集這些dataframes根據從maxDF

採取的條件動態條件

我可以手動使它成爲每個數據幀如下

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

A 
factor condition 
A   0 
A   3 
A   6 
A   7 

我想問一下,如果有任何的方式來自動子集列表中的所有dataframes 'mylist'而不是一個一個地去做,因爲我在真實列表中有99個數據框。

我期待聽到您的見解。

隨着親切的問候,

回答

0

你只需要使用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 
+0

非常感謝你。它效果很好! – BINewbies

0
lapply(1:nrow(maxDF), function(i) filter(mylist[[i]], condition < maxDF[i,2])) 

應該做的工作。