楼主: 不二不幸福
2721 20

[问答] 找到某两列顺序相反,其余字段相同的行 [推广有奖]

  • 0关注
  • 1粉丝

硕士生

33%

还不是VIP/贵宾

-

威望
0
论坛币
161 个
通用积分
2.8500
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1641 点
帖子
76
精华
0
在线时间
160 小时
注册时间
2017-9-26
最后登录
2024-6-14

楼主
不二不幸福 发表于 2018-5-6 13:58:40 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
数据格式如下:
1 E00548:177:HKH53CCXY:4:1101:10003:10029 TACAGACTGTGG    CTCTCCTATAGC    chr2    184106244       184106312
2 E00548:177:HKH53CCXY:4:1101:10003:10099 TGATACCGGACA    GTGCCTCATCTA    chr3    139790591       139790643
3 E00548:177:HKH53CCXY:4:1101:10003:10099 TGATACCGGACA    GTGCCTCATCTA    chr3    139790643       139790591
4 E00548:177:HKH53CCXY:4:1101:10003:10169 CTTCCATAGGCA    AGAGTTCACGGA    chr6    26713971        26713996
5 E00548:177:HKH53CCXY:4:1101:10003:10169 CTTCCATAGGCA    AGAGTTCACGGA    chr6    26713996        26713971
6 E00548:177:HKH53CCXY:4:1101:10003:10240 TAGACGTAGACG    TCAAGGAGAACC    chr14   37255539        37255588
7 E00548:177:HKH53CCXY:4:1101:10003:10240 TCAAGGAGAACC    TAGACGTAGACG    chr14   37255588        37255539
8 E00548:177:HKH53CCXY:4:1101:10003:15795 ACGACACTGCTA    CTCTCCTATAGC    chr14   96799778        96799778
9 E00548:177:HKH53CCXY:4:1101:10003:10029 CTCTCCTATAGC    TACAGACTGTGG    chr2    184106312       184106244



(第一列的序号是自己加的,原文件中没有)
比如第6、7行,他们的第2、3列顺序相反,第5、6列顺序也刚好相反,其余的字段内容相同
以及第1、9行,也是第2、3列顺序相反,第5、6列顺序也刚好相反,其余的字段内容相同 1.txt (1.43 KB)

现在想要把这种成对的两行输出到一个文件,例如上述数据的输出结果应该是:
E00548:177:HKH53CCXY:4:1101:10003:10029 TACAGACTGTGG    CTCTCCTATAGC    chr2    184106244       184106312
E00548:177:HKH53CCXY:4:1101:10003:10029 CTCTCCTATAGC    TACAGACTGTGG    chr2    184106312       184106244
E00548:177:HKH53CCXY:4:1101:10003:10240 TAGACGTAGACG    TCAAGGAGAACC    chr14   37255539        37255588
E00548:177:HKH53CCXY:4:1101:10003:10240 TCAAGGAGAACC    TAGACGTAGACG    chr14   37255588        37255539






数据比较大,有没有什么简单一点的方法快速找到想要的数据对?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:tata GTAG Gaga cctc 数据比较

回帖推荐

rainningpoet 发表于15楼  查看完整内容

那就加上要第四行相同 library(dplyr) library(sqldf) data001=read.table('1.txt') head(data001) glimpse(data001) data002=cbind(data001,ind=1:nrow(data001)) data003=sqldf('select a.* , b.ind as ind_b from data002 a left join data002 b on a.V5=b.V6 and a.V6=b.V5 and a.indb.ind and a.V4=b.V4 ') data004=data003%>%filter(is.na(ind_b)==FALSE)%>%select(-ind_b) data004

rainningpoet 发表于2楼  查看完整内容

library(dplyr) data001=read.table('1.txt') head(data001) glimpse(data001) data002=data001%>%mutate(new_v23_a=paste(V2,V3),new_v23_b=paste(V3,V2) ,new_v56_a=paste(V5,V6),new_v56_b=paste(V6,V5) )%>%mutate(V23_flag=ifelse(new_v23_a %in% new_v23_b,1,0) ,V56_flag=ifelse(new_v56_a %in% new_v56_b,1,0) ...

沙发
rainningpoet 发表于 2018-5-6 15:02:35
library(dplyr)

data001=read.table('1.txt')
head(data001)
glimpse(data001)
data002=data001%>%mutate(new_v23_a=paste(V2,V3),new_v23_b=paste(V3,V2)
                         ,new_v56_a=paste(V5,V6),new_v56_b=paste(V6,V5)
                         )%>%mutate(V23_flag=ifelse(new_v23_a %in% new_v23_b,1,0)
                         ,V56_flag=ifelse(new_v56_a %in% new_v56_b,1,0)
                         )%>%filter(V23_flag==1,V56_flag==1)                                       
                                       

data002   
已有 2 人评分论坛币 学术水平 收起 理由
cheetahfly + 10 精彩帖子
不二不幸福 + 1 精彩帖子

总评分: 论坛币 + 10  学术水平 + 1   查看全部评分

藤椅
zhou1_20 发表于 2018-5-6 16:17:16
  1. dt <- read.table('D:\\1.txt',stringsAsFactors = F)
  2. id1 <- paste(dt$V2,dt$V3,sep='-')%in%paste(dt$V3,dt$V2,sep='-')
  3. id2 <- paste(dt$V5,dt$V6,sep='-')%in%paste(dt$V6,dt$V5,sep='-')
  4. st <- paste(dt$V1,dt$V4,sep='-')
  5. tem <- as.data.frame(table(st),stringsAsFactors = F)
  6. id3 <- st%in%tem$st[tem$Freq!=1]
  7. dt1 <- dt[id3,]
  8. dt_new=dt[id1&id2&id3,]
  9. names(dt_new)=names(dt)
  10. dt_new
复制代码
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 精彩帖子

总评分: 论坛币 + 10   查看全部评分

板凳
不二不幸福 发表于 2018-5-6 16:26:01
rainningpoet 发表于 2018-5-6 15:02
library(dplyr)

data001=read.table('1.txt')
额,谢谢,试了一下,找是找出来了,但是结果还是有点问题啊:
E00548:177:HKH53CCXY:4:1101:10003:10029 TACAGACTGTGG    CTCTCCTATAGC    chr2    184106244       184106312       TACAGACTGTGG CTCTCCTATAGC       CTCTCCTATAGC TACAGACTGTGG    184106244 184106312     184106312 184106244     1       1
E00548:177:HKH53CCXY:4:1101:10003:10240 TAGACGTAGACG    TCAAGGAGAACC    chr14   37255539        37255588        TAGACGTAGACG TCAAGGAGAACC       TCAAGGAGAACC TAGACGTAGACG    37255539 37255588       37255588 37255539       1       1
E00548:177:HKH53CCXY:4:1101:10003:10240 TCAAGGAGAACC    TAGACGTAGACG    chr14   37255588        37255539        TCAAGGAGAACC TAGACGTAGACG       TAGACGTAGACG TCAAGGAGAACC    37255588 37255539       37255539 37255588       1       1
E00548:177:HKH53CCXY:4:1101:10003:10029 CTCTCCTATAGC    TACAGACTGTGG    chr2    184106312       184106244       CTCTCCTATAGC TACAGACTGTGG       TACAGACTGTGG CTCTCCTATAGC    184106312 184106244     184106244 184106312     1       1
E00548:177:HKH53CCXY:4:1101:10003:17272 AGCGGATGAGTA    AGCGGATGAGTA    chr15   80282260        80282316        AGCGGATGAGTA AGCGGATGAGTA       AGCGGATGAGTA AGCGGATGAGTA    80282260 80282316       80282316 80282260       1       1
E00548:177:HKH53CCXY:4:1101:10003:17272 AGCGGATGAGTA    AGCGGATGAGTA    chr15   80282316        80282260        AGCGGATGAGTA AGCGGATGAGTA       AGCGGATGAGTA AGCGGATGAGTA    80282316 80282260       80282260 80282316       1       1

为什么后面多了这么多列?

报纸
不二不幸福 发表于 2018-5-6 16:27:03
rainningpoet 发表于 2018-5-6 15:02
library(dplyr)

data001=read.table('1.txt')
结果为什么多了这么多列?

地板
不二不幸福 发表于 2018-5-6 16:31:24
zhou1_20 发表于 2018-5-6 16:17
object 'dtV3' not found

7
zhou1_20 发表于 2018-5-6 16:35:35
dt <- read.table('D:\\1.txt',stringsAsFactors = F)
id1 <- paste(dt$V2,dt$V3,sep='-')%in%paste(dt$V3,dt$V2,sep='-')
id2 <- paste(dt$V5,dt$V6,sep='-')%in%paste(dt$V6,dt$V5,sep='-')
st <- paste(dt$V1,dt$V4,sep='-')
tem <- as.data.frame(table(st),stringsAsFactors = F)
id3 <- st%in%tem$st[tem$Freq!=1]
dt1 <- dt[id3,]
dt_new=dt[id1&id2&id3,]
names(dt_new)=names(dt)
dt_new

8
zhou1_20 发表于 2018-5-6 16:36:58
2018-05-06_16-36-24.png

9
不二不幸福 发表于 2018-5-6 18:05:01
zhou1_20 发表于 2018-5-6 16:36
library(data.table)
dt <- fread('1.txt',stringsAsFactors = F)
id1 <- paste(dtV3,sep='-')%in%paste(dtV2,sep='-')
id2 <- paste(dtV6,sep='-')%in%paste(dtV5,sep='-')
st <- paste(dtV4,sep='-')
tem <- as.data.frame(table(st),stringsAsFactors = F)
id3 <- st%in%temFreq!=1]
dt1 <- dt[id3,]
dt_new=dt[id1&id2&id3,]
names(dt_new)=names(dt)
fwrite(dt_new,"2.txt",sep='\t',row.names=FALSE,quote=FALSE,col.names=FALSE)


$ ~/miniconda2/bin/Rscript test_1.R
Error in paste(dtV3, sep = "-") : object 'dtV3' not found
Calls: %in% -> paste
Execution halted

10
不二不幸福 发表于 2018-5-6 18:09:11
rainningpoet 发表于 2018-5-6 15:02
library(dplyr)

data001=read.table('1.txt')
再请教一下,如果我只想对5、6列去顺序相反,2、3列不管,在你的代码上做了如下修改:
library(data.table)
library(dplyr)
data<-fread("1.txt",head=FALSE)
glimpse(data)
data2=data%>%mutate(new_v56_a=paste(V5,V6),new_v56_b=paste(V6,V5)
                         )%>%mutate(V56_flag=ifelse(new_v56_a %in% new_v56_b,1,0)
                         )%>%filter(V56_flag==1)
data3=data2[,-(7:16)]
fwrite(data3,"2.txt",sep='\t',row.names=FALSE,quote=FALSE,col.names=FALSE)

为什么一行都没过滤掉?

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-21 20:44