2014-04-04 39 views
1

我有兩個列表,我想使用另一個列表在列表中的數據子集。我說,我有所謂的名單和mylisthislist如何使用另一個列表對列表進行子集劃分?

mylist <- list(a = data.frame(cola = 1:3, colb = 4:6), 
      b = data.frame(cola = 1:3, colb = 6:8)) 
> mylist 
$a 
    cola colb 
1 1 4 
2 2 5 
3 3 6 

$b 
    cola colb 
1 1 6 
2 2 7 
3 3 8 

> 

hislist

hislist <- list(a = 5:6, 
       b = 7:8) 

> hislist 
$a 
[1] 5 6 

$b 
[1] 7 8 

我試圖子集MYLIST使用lapply功能:

lapply(mylist, function(x) subset(x, colb %in% hislist)) 
#or 
lapply(mylist, function(x) x[x$colb %in% hislist,]) 

但這些不工作。如何解決這個問題?

回答

4

最簡單的解決方案,我能想到的是使用mapply

mapply(function(x, y) x[x[, 2] %in% y,], mylist, hislist, SIMPLIFY=FALSE) 
# $a 
# cola colb 
# 2 2 5 
# 3 3 6 
# 
# $b 
# cola colb 
# 2 2 7 
# 3 3 8 

的功能並不比你在當前lapply方法用什麼太大的不同。

+0

是的,這似乎給出了正確的結果! – jrara

1

在您的具體示例中,只需使用unlist for hislist,這將使其成爲值的向量。

lapply(mylist, function(x) x[x$colb %in% unlist(hislist),]) 
$a 
    cola colb 
2 2 5 
3 3 6 

$b 
    cola colb 
2 2 11 
3 3 12 
+0

對不起,我編輯了這個問題,我不想使用unlist,因爲當mylist(a和b)中存在相同的值時,它會給出不正確的結果 – jrara

相關問題