2016-12-14 21 views
0

2つの列「遺伝子」と「ランク」を含むRの大きな順序付けられたデータフレームがあり、複製された行の2番目のオカレンスを正の方向に削除したいANDは、負の方向に複製された行が最初に出現したことを示します。R:条件付きで複製された行を削除する

たとえば、次のデータセットに、私はどちらの方向に最大のランク値を有する遺伝子を保持するように、ライン6262及び12200を削除したいと思います:

> head(a_ordered, n=10) 
       gene  rank 
10597  SLC37A1 2.827330 
6262  SLC37A1 2.700882 
12504   UBR4 2.698938 
10934  SP110 2.690130 
1563   CALB1 2.633179 
6031 LOC100128239 -2.499959 
6718  MBTPS1 -2.513134 
1528   CA14 -2.549553 
12200  NXPE3 -2.850011 
7978   NXPE3 -3.153175 

となり、

> head(a_ordered, n=10) 
        gene  rank 
    10597  SLC37A1 2.827330 
    12504   UBR4 2.698938 
    10934  SP110 2.690130 
    1563   CALB1 2.633179 
    6031 LOC100128239 -2.499959 
    6718  MBTPS1 -2.513134 
    1528   CA14 -2.549553 
    7978   NXPE3 -3.153175 

ありがとうございました!

+0

@RichScriven、ランク値は、目的の特定の遺伝子についての遺伝子発現の関連する倍数変化に対応し、最も強いダウンレギュレーション値を示す遺伝子を保持したいと考えている。 – emblake

答えて

0

あなたはabs(rank) == max(abs(rank))geneごとにグループ化されているため、これらの行を保つためにdplyr::filterを使用することができます。

library(dplyr) 
res <- df %>% group_by(gene) %>% filter(abs(rank) == max(abs(rank))) 
##Source: local data frame [8 x 3] 
##Groups: gene [8] 
## 
##  ID   gene  rank 
## <int>  <chr>  <dbl> 
##1 10597  SLC37A1 2.827330 
##2 12504   UBR4 2.698938 
##3 10934  SP110 2.690130 
##4 1563  CALB1 2.633179 
##5 6031 LOC100128239 -2.499959 
##6 6718  MBTPS1 -2.513134 
##7 1528   CA14 -2.549553 
##8 7978  NXPE3 -3.153175 

データ:あなたがゼロから最も異なる値を保持したい場合は

df <- structure(list(ID = c(10597L, 6262L, 12504L, 10934L, 1563L, 6031L, 
6718L, 1528L, 12200L, 7978L), gene = c("SLC37A1", "SLC37A1", 
"UBR4", "SP110", "CALB1", "LOC100128239", "MBTPS1", "CA14", "NXPE3", 
"NXPE3"), rank = c(2.82733, 2.700882, 2.698938, 2.69013, 2.633179, 
-2.499959, -2.513134, -2.549553, -2.850011, -3.153175)), .Names = c("ID", 
"gene", "rank"), class = "data.frame", row.names = c(NA, -10L 
)) 
##  ID   gene  rank 
##1 10597  SLC37A1 2.827330 
##2 6262  SLC37A1 2.700882 
##3 12504   UBR4 2.698938 
##4 10934  SP110 2.690130 
##5 1563  CALB1 2.633179 
##6 6031 LOC100128239 -2.499959 
##7 6718  MBTPS1 -2.513134 
##8 1528   CA14 -2.549553 
##9 12200  NXPE3 -2.850011 
##10 7978  NXPE3 -3.153175 
+0

Brilliant!ありがとう! – emblake

0

二乗された値を使用して、それに応じてデータフレームを注文することができます

a_ordered$rank2 <- a_ordered$rank^2 
a_ordered <- a_ordered[order(a_ordered$rank2, decreasing = TRUE),] 
a_ordered <- a_ordered[-(duplicated(a_ordered$gene)==TRUE),] 

重複は列を上から下に通し、2番目(および3番目など)の値を重複としてフラグを立てます。

関連する問題