2015-03-13 65 views
1

我有一個R數據框,由兩列組成:'基因'和'表達'。它有一些基因的重複行,但是這些重複的條目具有不同的表達式值。我想濃縮重複行,因此每個基因只有一行,並且該行具有最大的「絕對」表達式值。請參見下面的例子:有條件地從數據框中刪除重複的行

對於這個數據幀...

df <- data.frame(Gene=c("AKT","MYC","MYC","RAS","RAS","RAS","TP53"), 
       Expression=c(3,2,6,1,-4,-1,-3)) 

    Gene Expression 
1 AKT   3 
2 MYC   2 
3 MYC   6 
4 RAS   1 
5 RAS   -4 
6 RAS   -1 
7 TP53   -3 

我想這個輸出..

Gene Expression 
1 AKT   3 
2 MYC   6 
3 RAS   -4 
4 TP53   -3 

我可以使用識別重複基因

duplicated(df$Gene) 

但我不確定如何排除那些重複次數較小的絕對值

詩 - 我在該R說大話新..

+0

的可能重複的[R,有條件地去除重複行(http://stackoverflow.com/questions/10835284/r-conditionally-remove-duplicate-rows) – 2015-03-13 17:16:10

回答

1

看起來像aggregate()工作。

# Input data frame 
df <- data.frame(Gene=c("AKT", "MYC", "MYC", "RAS", "RAS", "RAS", "TP53"), 
       Expression=c(3, 2, 6, 1, -4, -1, -3)) 

# Maximum absolute value of Expression by Gene 
maxabs <- with(df, aggregate(Expression, list(Gene=Gene), FUN=function(x) max(abs(x)))) 

# Combine with original data frame 
df <- merge(df, maxabs, by="Gene") 

# Get desired rows 
subset(df, abs(Expression) == x) 

# Output: 
    Gene Expression 
1 AKT   3 
3 MYC   6 
5 RAS   -4 
7 TP53   -3 

不過,如果在同一個基因的多個表達測量具有恰好滿足過濾條件相同的值,會發生什麼?你仍然會有重複的行,但現在每個基因選擇哪一行並不重要。我們所要做的就是再增加一步。

例如起見,假設你有一個額外的行對於具有6.然後按照相同的步驟表達式的值MYC給了我們這樣的:

# Example of multiple rows after filtering: 
    Gene Expression 
1 AKT   3 
2 MYC   6 
3 MYC   6 
4 RAS   -4 
5 TP53   -3 

# Assign the subset to something 
df.maxexpr <- subset(df, abs(Expression) == x) 

# Remove duplicate genes (all gene rows should be identical) 
df.maxexpr[!duplicated(df.maxexpr$Gene), ] 

那麼在這種情況下,輸出相匹配的預期輸出如前。

+0

非常好,謝謝!真的很欣賞演練。 (順便說一句 - 缺少','在重複的參數) – 2015-03-14 12:30:17

+0

@AlasdairR:很高興爲你工作。謝謝你指出缺少的逗號,修正。 – 2015-03-15 01:10:58

1

這裏是dplyr溶液:

df <- data.frame(Gene=c("AKT","MYC","MYC","RAS","RAS","RAS","TP53"), 
       Expression=c(3,2,6,1,-4,-1,-3)) 

library(dplyr) 
df %>% 
    group_by(Gene) %>% 
    filter(row_number(desc(abs(Expression))) == 1) 

其中給出:

#Source: local data frame [4 x 2] 
#Groups: Gene 
# 
# Gene Expression 
#1 AKT   3 
#2 MYC   6 
#3 RAS   -4 
#4 TP53   -3