2016-06-29 185 views
2

我想根據另一個數據幀(PvalueData)中的p值的條件過濾掉我的數據框(MainData)中的行。所以,我想要的是:如果連續超過50%的柱子的p值大於0.05(PvalueData),那麼該特定行將從主數據框(MainDatA)中移除。如何根據另一個數據幀的值刪除數據幀中的行

可以說,這裏是數據我有:

MainData:

 C1 C2 C3 C4 C5 
Gene1 70 54 54 75 75 
Gene2 23 18 16 54 15 
Gene3 43 93 90 43 92 
Gene4 32 50 23 13 45 
Gene5 44 53 46 34 47 
Gene6 42 34 53 85 43 
Gene7 49 55 67 49 89 
Gene8 25 45 49 34 35 
Gene9 19 16 54 53 94 

PvalueData:

 C1  C2  C3  C4  C5 
Gene1 0.04 0.01 0.01 0.01 0.01 
Gene2 0.01 0.01 0.01 0.02 0.01 
Gene3 0.01 0.07 0.09 0.01 0.06 
Gene4 0.01 0.03 0.06 0.01 0.02 
Gene5 0.04 0.01 0.07 0.08 0.01 
Gene6 0.09 0.07 0.01 0.06 0.06 
Gene7 0.10 0.07 0.01 0.01 0.06 
Gene8 0.01 0.01 0.02 0.01 0.01 
Gene9 0.09 0.01 0.07 0.08 0.06 

所以我的結果文件應該是這樣:

結果:

 C1 C2 C3 C4 C5 
Gene1 70 54 54 75 75 
Gene2 23 18 16 54 15 
Gene4 32 50 23 13 45 
Gene5 44 53 46 34 47 
Gene8 25 45 49 34 35 

我曾嘗試這樣的事:

check = if (PvalueData[!rowSums(PvalueData>thres) > ncol(PvalueData)*.5], MainData) 

但真的不能工作了。

+1

加上'dput'數據或數據。例如 – user5249203

回答

5

下面是使用rowMeans答案:

df[rowMeans(df2 < 0.05) > 0.5,] 
     C1 C2 C3 C4 C5 
Gene1 70 54 54 75 75 
Gene2 23 18 16 54 15 
Gene4 32 50 23 13 45 
Gene5 44 53 46 34 47 
Gene8 25 45 49 34 35 

下面是代碼的快速故障:

  • df2 < 0.05脅迫的data.frame成由邏輯元件的矩陣(TRUE和FALSE)如果元素符合您的p值標準,則元素爲TRUE。
  • rowMeans計算每行的這些邏輯值的平均值。
  • 這些手段用於根據第二條準則對主要數據框進行子集劃分。

數據

df <- read.table(header=T, text="C1 C2 C3 C4 C5 
Gene1 70 54 54 75 75 
Gene2 23 18 16 54 15 
Gene3 43 93 90 43 92 
Gene4 32 50 23 13 45 
Gene5 44 53 46 34 47 
Gene6 42 34 53 85 43 
Gene7 49 55 67 49 89 
Gene8 25 45 49 34 35 
Gene9 19 16 54 53 94") 

df2 <- read.table(header=T, text="C1  C2  C3  C4  C5 
Gene1 0.04 0.01 0.01 0.01 0.01 
Gene2 0.01 0.01 0.01 0.02 0.01 
Gene3 0.01 0.07 0.09 0.01 0.06 
Gene4 0.01 0.03 0.06 0.01 0.02 
Gene5 0.04 0.01 0.07 0.08 0.01 
Gene6 0.09 0.07 0.01 0.06 0.06 
Gene7 0.10 0.07 0.01 0.01 0.06 
Gene8 0.01 0.01 0.02 0.01 0.01 
Gene9 0.09 0.01 0.07 0.08 0.06") 
+1

我的壞。我錯過了0.5,我認爲它是0.05。好的解決方案:)。 – LyzandeR

3

也許不是最有效的方式,但在基礎R你可以使用一個簡單的apply

df1[apply(df2, 1, function(x) sum(x <= 0.05) >= 3), ] 
#  C1 C2 C3 C4 C5 
#Gene1 70 54 54 75 75 
#Gene2 23 18 16 54 15 
#Gene4 32 50 23 13 45 
#Gene5 44 53 46 34 47 
#Gene8 25 45 49 34 35 

本質apply將通過行,如果迭代總和×< = 0.05大於(或等於)3則返回TRUE否則返回FALSE。然後,我們使用這個邏輯矢量子集DF1

數據

df1 <- read.table(text = "  C1 C2 C3 C4 C5 
Gene1 70 54 54 75 75 
Gene2 23 18 16 54 15 
Gene3 43 93 90 43 92 
Gene4 32 50 23 13 45 
Gene5 44 53 46 34 47 
Gene6 42 34 53 85 43 
Gene7 49 55 67 49 89 
Gene8 25 45 49 34 35 
Gene9 19 16 54 53 94") 

df2 <- read.table(text = "  C1  C2  C3  C4  C5 
Gene1 0.04 0.01 0.01 0.01 0.01 
Gene2 0.01 0.01 0.01 0.02 0.01 
Gene3 0.01 0.07 0.09 0.01 0.06 
Gene4 0.01 0.03 0.06 0.01 0.02 
Gene5 0.04 0.01 0.07 0.08 0.01 
Gene6 0.09 0.07 0.01 0.06 0.06 
Gene7 0.10 0.07 0.01 0.01 0.06 
Gene8 0.01 0.01 0.02 0.01 0.01 
Gene9 0.09 0.01 0.07 0.08 0.06") 
2

這是你可以使用rowSumssubset做什麼:

subset(df, rowSums(df2>.05)<ceiling(ncol(df)/2)) 

     # C1 C2 C3 C4 C5 
# Gene1 70 54 54 75 75 
# Gene2 23 18 16 54 15 
# Gene4 32 50 23 13 45 
# Gene5 44 53 46 34 47 
# Gene8 25 45 49 34 35 

讓那些行,不到50%的p值大於0.05

DATA

df <- structure(list(C1 = c(70L, 23L, 43L, 32L, 44L, 42L, 49L, 25L, 
19L), C2 = c(54L, 18L, 93L, 50L, 53L, 34L, 55L, 45L, 16L), C3 = c(54L, 
16L, 90L, 23L, 46L, 53L, 67L, 49L, 54L), C4 = c(75L, 54L, 43L, 
13L, 34L, 85L, 49L, 34L, 53L), C5 = c(75L, 15L, 92L, 45L, 47L, 
43L, 89L, 35L, 94L)), .Names = c("C1", "C2", "C3", "C4", "C5" 
), class = "data.frame", row.names = c("Gene1", "Gene2", "Gene3", 
"Gene4", "Gene5", "Gene6", "Gene7", "Gene8", "Gene9")) 

df2 <- structure(list(C1 = c(0.04, 0.01, 0.01, 0.01, 0.04, 0.09, 0.1, 
0.01, 0.09), C2 = c(0.01, 0.01, 0.07, 0.03, 0.01, 0.07, 0.07, 
0.01, 0.01), C3 = c(0.01, 0.01, 0.09, 0.06, 0.07, 0.01, 0.01, 
0.02, 0.07), C4 = c(0.01, 0.02, 0.01, 0.01, 0.08, 0.06, 0.01, 
0.01, 0.08), C5 = c(0.01, 0.01, 0.06, 0.02, 0.01, 0.06, 0.06, 
0.01, 0.06)), .Names = c("C1", "C2", "C3", "C4", "C5"), class = "data.frame", row.names = c("Gene1", 
"Gene2", "Gene3", "Gene4", "Gene5", "Gene6", "Gene7", "Gene8", 
"Gene9")) 
相關問題