根据列中的重复项筛选数据框

时间:2015-09-06 21:02:43

标签: r

我有一个非常大的数据框,看起来像这样:

Gene Sample1 Sample2 
   A       1       0
   A       0       1
   A       1       1
   B       1       1
   C       0       1 
   C       0       0 

我想只保留Gene列中存在重复的行。

所以表格会变成:

Gene Sample1 Sample2 
   A       1       0
   A       0       1
   A       1       1    
   C       0       1 
   C       0       0  

我已尝试在R中使用subset(df, duplicated(df$Genes))但我认为它留下了一些非重复,因为命名比A / B / C更复杂。喜欢:WASH11,KANSL-1等 这可以在R或Linux shell中完成吗?

3 个答案:

答案 0 :(得分:3)

在R中,您可以从duplicated()双倍向上,从两个方向开始。

df[with(df, duplicated(Gene) | duplicated(Gene, fromLast = TRUE)), ]
#   Gene Sample1 Sample2
# 1    A       1       0
# 2    A       0       1
# 3    A       1       1
# 5    C       0       1
# 6    C       0       0

您还可以使用第一列的表格。

tbl <- table(df$Gene)
df[df$Gene %in% names(tbl)[tbl > 1], ]
#   Gene Sample1 Sample2
# 1    A       1       0
# 2    A       0       1
# 3    A       1       1
# 5    C       0       1
# 6    C       0       0

其他选项,根据实际数据可能有效或可能无效......

df[(table(df$Gene) > 1)[df$Gene],]  ## credit to Pierre LaFortune
## or
df[with(df, (tabulate(Gene) > 1)[Gene]), ]

答案 1 :(得分:3)

您可以通过应用ave并计算条目来找到每个的数量:

ave(as.numeric(x$Gene), x$Gene, FUN=length)
## [1] 3 3 3 1 2 2

在此表达式中,ave的第一个参数只需要一个数字,其长度等于数据框中的行数。

使用它来选择行:

count <- ave(as.numeric(x$Gene), x$Gene, FUN=length)
x[count>1,]
##   Gene Sample1 Sample2
## 1    A       1       0
## 2    A       0       1
## 3    A       1       1
## 5    C       0       1
## 6    C       0       0

答案 2 :(得分:2)

使用Perl从命令行

<asp:Checkbox ID="switchAdmin" CssClass="cmn-toggle cmn-toggle-round" ClientIDMode="Static" Runat="server" />
<label for="switchAdmin"></label>

cat counts.txt Gene Sample1 Sample2 A 1 0 A 0 1 A 1 1 B 1 1 C 0 1 C 0 0 perl -ne '$cg{ (split /\t/,$_)[0] }++; push (@lines, $_); END { print shift @lines; foreach (@lines) { print if ($cg{ (split /\t/,$_)[0] } >= 2) }}' counts.txt Gene Sample1 Sample2 A 1 0 A 0 1 A 1 1 C 0 1 C 0 0 哈希计算每个基因的出现次数。通过仅选择每行上%cg操作的第一个元素[0]来提取基因。 split逐行保存文件的全部内容。然后@lines块仅输出其基因出现≥2次的那些行。