可能是一个基本问题,但我对R很新,我在列表上有点挣扎。我希望你们中的一些人可以帮助我。我试着在网上寻找类似的问题,但我找不到任何针对我的情况,对不起,如果我忽略了什么。
我有两个类似的列表:
list1
$ `value1`
[1] "character1"
$ `value2`
[1] "character2"
$ `value3`
[1] "character1" "character3" "character4"
list2
$ `XX`
[1] "character1" "character3" "character6"
$ `YY`
[1] "character1" "character2" "character3"
$ `ZZ`
[1] "character3" "character4" "character5"
我想要做的是从list2中取下标XX,在list1中找到它并输出一个只有这些出现的新列表,它们在list2的下标XX中。我不想输出TRUE / FALSE,我希望得到这样的东西:
final_list
$ `value1`
[1] "character1"
$ `value3`
[1] "character1" "character3"
我试过
list1[list2$XX]
如果值是整数,则有效,但如果是字符,则无效。然后我就像这样列出很长的名单:
$<NA>
NULL
任何帮助真的很感激!!
答案 0 :(得分:1)
您可以使用此方法:
tmp <- lapply(list1, intersect, list2$XX)
final_list <- tmp[as.logical(sapply(tmp, length))]
# $value1
# [1] "character1"
#
# $value3
# [1] "character1" "character3"
在第一步中,返回常用字符串。在第二步中,删除空列表元素。