我如何计算列表和另一个文件的每列中出现多少字符串?

时间:2015-09-15 16:53:55

标签: r string-comparison overlap

我正在寻找一种方法(最好但不一定在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列中 输出格式并不重要,只是知道每个文件中出现多少重叠的方法。

由于 对不起,如果一个重复的问题,我搜索但没有看到一个。

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