繁体   English   中英

R:如何仅通过比较每个字符串中前3个制表符分隔的项目,对两个字符串向量使用setdiff?

[英]R: How to use setdiff on two string vectors by only comparing the first 3 tab delimited items in each string?

我试图找出一种方法在R中取两个字符串向量的差异,但只基于每个字符串中制表符分隔的前3列。 例如,这是list1和list2

列表1:

        "1\t1113200\t1118399\t1\t1101465\t1120176\tENSRNOG00000040300\tRaet1l\t0\n" 
        "1\t1180200\t1187599\t1\t1177682\t1221416\tENSRNOG00000061316\tAABR07000121.1\t0\n"
        "1\t1180200\t1187599\t1\t1177632\t1221416\tENSRNOG00000061316\tAABR07000121.1\t0\n"

列表2:

 "1\t1113200\t1118399\t1\t1101465\t1120176\tENSRNOG00000040300\tRaet1l\t0\n" 
  "1\t1180200\t1187599\t1\t1177682\t1221416\tENSRNOG00000061316\tAABR07000121.1\t0\n"

我想做setdiff(list2,list1) ,所以我只是在list2中得到list1中不存在的所有东西,但是我想基于前3个制表符分隔的字符串来做。 所以在list1中我只会考虑:

   "1\t1113200\t1118399"

从第一个条目。 但是我仍然希望返回完整的字符串。 我只想使用前3列进行比较。 我无法弄清楚如何做到这一点,任何帮助将不胜感激。 我已经查看了几个SO帖子,其中没有一个似乎有帮助。

为了提取前三列(不确定为什么需要这个作为长字符串而不是数据帧...),我将使用qdap库中的beg2char() (虽然,如果它们都是相同的长度,则substr()可以正常工作。)

beg2char(list1, '\t', 3) # Will extract from the beginning up to the third tab delimiter

然后,而不是setdiff我会简单地使用%in% ,以检查是否在元素的子list2相匹配任意元素的list1

beg2char(list2, '\t', 3) %in% beg2char(list1, '\t', 3) # will give you TRUE/FALSE
list2[!(beg2char(list2, '\t', 3) %in% beg2char(list1, '\t', 3))]

将给出list2的完整元素,这些元素具有list1中不存在的子字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM