gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 09:33:26 26 4
gpt4 key购买 nike

我试图在 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"

list 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 帖子,它们似乎都没有帮助。

最佳答案

为了提取前三列(不确定为什么需要将其作为长字符串而不是数据框...),我会使用 beg2char()来自 qdap图书馆。 (不过,如果它们的长度都相同,则 base 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 中不存在的子字符串.

关于R:如何通过仅比较每个字符串中的前 3 个制表符分隔项来对两个字符串向量使用 setdiff?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39679578/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com