2014-04-04 38 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

相关问题