我有一个223k x 5列的数据帧。我想相互比较成对的列。
数据帧的一个小例子
NAME COLA COLB COLC COLD
1 T C G A
2 G C G A
3 A C G A
4 A G A G
5 A C A G
6 A G G A
7 A G NA NA
8 T C NA NA
9 C T A G
10 G A C T
11 A G T C
12 T C C T
13 C T C T
我想将COLC和COLD与COLA和COLB进行比较,然后将数据分为groupS。像
GROUP 1
NAME COLA COLB COLC COLD
1 T C G A
10 G A C T
9 C T A G
11 A G T C
GROUP 2
NAME COLA COLB COLC COLD
2 G C G A
3 A C G A
5 A C A G
GROUP 3
NAME COLA COLB COLC COLD
4 A G A G
6 A G G A
12 T C C T
13 C T C T
GROUP 4
NAME COLA COLB COLC COLD
7 A G NA NA
8 T C NA NA
我尝试使用if语句进行处理,但这对我不起作用。我也尝试使用子集函数,但是列中的因素并不相同。 COLA和COLB是6个因素,而COLC和COLD是4个因素。
for (i in seq (Tab2$NAME){
if (Tab2$COLC == Tab2$COLA || Tab2$COLC == Tab2$COLB){
if (Tab2$COLD == Tab2$COLA || Tab2$COLD == Tab2$COLB){
Tab3 <- Tab2[i,]
Tab4 <- rbind(Tab4, Tab3)
}
}
if (Tab2$COLC != Tab2$COLA && Tab2$COLC != Tab2$COLB){
if (Tab2$COLD != Tab2$COLA && Tab2$COLD != Tab2$COLB){
Tab5 <- Tab2[i,]
Tab6<- rbind(Tab6, Tab5)
}
}
}
答案 0 :(得分:1)
子集的工作方式类似于以下示例:
# Create dataframe
df = read.table(text = '
NAME COLA COLB COLC COLD
1 T C G A
2 G C G A
3 A C G A
4 A G A G
5 A C A G
6 A G G A
7 A G NA NA
8 T C NA NA
9 C T A G
10 G A C T
11 A G T C
12 T C C T
13 C T C T
', header = T)
# Example grouping
group1 <- subset(df, df$COLC == df$COLA | df$COLC == df$COLB)