基于元素列表b在列表a中子集元素

时间:2015-01-11 17:36:21

标签: r plyr

我有2个名单:

c1 <- c("e","f","g","h")
c2 <- c("j","k","l","m")
list1 <- list(c1,c2)
i1 <- c(1,3)
i2 <- c(2,4)
list2 <- list(i1,i2)

我想基于列表b中的整数向量来对列表a中的字符向量进行子集化。这样我最终会得到一个包含c1(只有e和g)和c2(只有k和m)的新列表(list3)。我目前正在研究plyr的可能性,因此解决方案最好应与plyr一起使用。我尝试了类似的东西,但没有用。

list3 <- llply(list1, function (x) x[list2])

1 个答案:

答案 0 :(得分:4)

您可以使用base R尝试使用Map,这比llply更紧凑。基本上,您有两个列表元素具有相同数量的列表,并希望基于(“list2”)的索引列表元素将第一个列表(“list1”)的每个列表元素子集一个。 Map将使用[

比较“list1”和“list2”及子集的相应元素
Map(`[`, list1, list2)

相同
Map(function(x,y) x[y], list1, list2)

或使用llply中的plyr(您实际上并不需要llply)。这可以通过lapply本身来实现。关键是比较两个列表的相应元素以及可以链接两者(当它们具有相同元素时)的可能方式是使用seq_along,这将获得一个列表中的元素序列({{1} })并使用该索引获取列表和子集的相应元素。

1:3