【问题标题】:How do i count how many strings occur in list and each column of another file?我如何计算列表和另一个文件的每一列中出现了多少个字符串?
【发布时间】:2015-09-15 16:53:55
【问题描述】:

我正在寻找一种方法(最好但不一定在 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 中的字符串出现的次数。对于每一列,输出在列和 listA 中找到的字符串数。 所以问题是如何遍历文本文件中的列并输出重叠量。

在上面的示例中,输出将是:1 0 0 0 因为 A3255 出现在 listA 和 file2 的第 1 列中 输出格式并不重要,只是了解每个文件中有多少重叠的某种方式。

谢谢 抱歉,如果有重复的问题,我搜索了但还没有看到。

【问题讨论】:

    标签: r string-comparison overlap


    【解决方案1】:

    如果您将制表符分隔的文本文件读入一个简单的 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-02
      • 2021-12-26
      • 2022-12-03
      • 1970-01-01
      • 2020-03-07
      • 1970-01-01
      • 2018-11-10
      • 1970-01-01
      相关资源
      最近更新 更多