我有两个列表,我想使用另一个列表在列表中对数据进行子集化。说,我有名为mylist
和hislist
的列表:
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
我尝试使用lapply函数对mylist进行子集化:
lapply(mylist, function(x) subset(x, colb %in% hislist))
#or
lapply(mylist, function(x) x[x$colb %in% hislist,])
但这些不起作用。如何解决这个问题?
答案 0 :(得分: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
方法中使用的功能没有太大差别。
答案 1 :(得分:1)
在您的特定示例中,只需对此列表使用unlist,这将使其成为值的向量。
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