r - 从数据框中提取重复行

标签 r dataframe extraction

我有一个我正在使用的大型数据框,前几行如下:

      Assay   Genotype   Sample    Result
1     001        G         1         0
2     001        A         2         1
3     001        G         3         0 
4     001        NA        1         NA
5     002        T         1         0
6     002        G         2         1
7     002        T         2         0 
8     002        T         4         0
9     003        NA        1         NA

我总共将处理 2000 个样本和每个样本的 168 个检测。

我想提取具有相同检测和样本的多个条目的行。我希望结果数据位于包含所有重复条目的数据框中,排序后重复项彼此相邻。从上面的示例中,结果将如下所示:
      Assay   Genotype   Sample    Result
1     001        G         1         0
4     001        NA        1         NA
6     002        G         2         1
7     002        T         2         0 

最佳答案

便于加载的演示数据:

df <- structure(list(Assay = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L), Genotype = structure(c(2L, 1L, 2L, NA, 3L, 2L, 3L, 3L, NA), .Label = c("A", "G", "T"), class = "factor"), Sample = c(1L, 2L, 3L, 1L, 1L, 2L, 2L, 4L, 1L), Result = c(0L, 1L, 0L, NA, 0L, 1L, 0L, 0L, NA)), .Names = c("Assay", "Genotype", "Sample", "Result"), class = "data.frame", row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9"))

您可以通过 duplicated 轻松获得重复的检测/ sample 对。 :
vars <- c('Assay', 'Sample')
dup <- df[duplicated(x[, vars]), vars]

导致:
> dup
  Assay Sample
4     1      1
7     2      2

其中需要一个简单的merge对于所需的结果:
> merge(dup, df)
  Assay Sample Genotype Result
1     1      1     <NA>     NA
2     1      1        G      0
3     2      2        G      1
4     2      2        T      0

关于r - 从数据框中提取重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7826437/

相关文章:

python - Pandas 将年份列转换为日期列

android - 如何使用 ADB 从 android 设备中提取 sqlite 数据库?

C# WPF 使用 DotNetZip 检测提取完成?

python - 处理大文件的最佳 Python Zip 模块是什么?

python - 按最后一个特殊字符将数据帧列拆分为 2 部分

r - 如何从插入符网格搜索中选择最佳的 ntree 值?

r - 误差函数 Erf(z)

R:使用 geom_line 访问函数内的列名

r - 从 df 中选择行,根据它们的值进行子组(逐一)

r - lapply 2个功能在一个命令