子集具有条件的数据帧行

时间:2014-12-07 00:44:55

标签: r

我的数据框看起来像:

 mi chr gen.pos phys.pos    sample1 sample2 sample3 sample4 sample5
 snp1   Ch09    NA  12712760    CC  CC  TT  TT  TT
 snp2   Ch08    NA  8218379     AA  AG  --  AA  AA
 snp3   Ch02    NA  6594215     GG  HH  GG  GG  GG
 snp4   Ch20    NA  42347146    CC  CC  CC  CC  CC
 snp5   Ch11    NA  1808563     GG  --  GG  GG  GG
 snp6   Ch14    NA  34284723    CC  CC  CC  TT  TT
 snp7   Ch13    NA  21532194    AA  GG  AA  GG  GG
 snp8   Ch13    NA  21532040    CC  AA  CC  AA  AA
 snp9   Ch11    NA  38423068    TT  CT  TT  CC  CC

我期待最终结果:

 mi chr gen.pos phys.pos    sample1 sample2 sample3 sample4 sample5
 snp1   Ch09    NA  12712760    CC  CC  TT  TT  TT
 snp3   Ch02    NA  6594215     GG  HH  GG  GG  GG
 snp6   Ch14    NA  34284723    CC  CC  CC  TT  TT
 snp7   Ch13    NA  21532194    AA  GG  AA  GG  GG
 snp8   Ch13    NA  21532040    CC  AA  CC  AA  AA
 snp9   Ch11    NA  38423068    TT  CT  TT  CC  CC

程序:保留包含与df[,-(1:4)]列表匹配的数据框Un <- c("AA","CC","GG","TT","HH")的任意两个唯一值的行

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

为这些规范创建索引变量

apply( df[-(1:4)], 1, function(x) length( unique( x[ x %in% Un])) ) >=2
[1]  TRUE FALSE  TRUE FALSE FALSE  TRUE  TRUE  TRUE  TRUE

然后用它来索引df的行。

dat[idx, ]
    mi  chr gen.pos phys.pos sample1 sample2 sample3 sample4 sample5
1 snp1 Ch09      NA 12712760      CC      CC      TT      TT      TT
3 snp3 Ch02      NA  6594215      GG      HH      GG      GG      GG
6 snp6 Ch14      NA 34284723      CC      CC      CC      TT      TT
7 snp7 Ch13      NA 21532194      AA      GG      AA      GG      GG
8 snp8 Ch13      NA 21532040      CC      AA      CC      AA      AA
9 snp9 Ch11      NA 38423068      TT      CT      TT      CC      CC