2015-03-13 63 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