![](/img/trans.png)
[英]R: How to use setdiff on two string vectors by only comparing the first 3 tab delimited items in each string? without using qdap
[英]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.