我正在寻找一种方法(最好但不一定在R中)来查找参考列表中的项目也出现在一系列列表中的次数。我需要知道参考列表和另一个列表之间每次比较的重叠程度。
所以我有一个列表,其中包含一系列字符串(前4行):
A2345
A3545
A643636
A3255
让我们称之为ListA。
然后我有一个制表符分隔的文本文件(file2),其中包含几个包含类似字符串的列。每列都是一个类似的独立列表:
A25325 A5634 A765436 A232
A3255 A35674 A5353 A474
A3453 A632 A5464 A863
A5543 A656 A8768 A684
我知道在shell中检查两个列表之间重叠的几种方法,但是我不知道如何说:采用listA和另一个文件中的每一列计算listA中字符串的出现次数。对于每列输出,在列和列表A中找到的字符串数。 所以问题是如何迭代文本文件中的列并输出重叠量。
在上面的示例中,输出将是:1 0 0 0 因为A3255出现在listA和file2的第1列中 输出格式并不重要,只是知道每个文件中出现多少重叠的方法。
由于 对不起,如果一个重复的问题,我搜索但没有看到一个。
答案 0 :(得分:0)
如果您将制表符分隔的文本文件读入简单的data.frame,则可以使用apply()
函数:
listA <- c("A2345", "A3545", "A643636", "A3255")
listB <- data.frame(b1 = c("A25325", "A3255", "A3453", "A5543"),
b2 = c("A5634", "A35674", "A632", "A656"),
b3 = c("A765436", "A5353", "A5464", "A8768"),
b4= c("A232", "A474", "A863", "A684"))
listB
# b1 b2 b3 b4
# 1 A25325 A5634 A765436 A232
# 2 A3255 A35674 A5353 A474
# 3 A3453 A632 A5464 A863
# 4 A5543 A656 A8768 A684
然后一个简单的apply()
调用应该完成这项工作:
apply(listB, 2, function(x) {sum(x %in% listA)})
b1 b2 b3 b4
1 0 0 0
apply()函数中的参数MARGIN=2
将迭代搜索列。您可以在这里查看:https://stat.ethz.ch/R-manual/R-devel/library/base/html/apply.html