如何根据R中的多列对表数据进行子集化?

时间:2019-08-30 16:35:28

标签: r subset

我有一个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) 
  }
 }     
 }

1 个答案:

答案 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)
相关问题