从数据框中提取重复的行

Sam*_*bus 4 r extraction dataframe

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

      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
Run Code Online (Sandbox Code Playgroud)

总共我将为每个样本处理2000个样本和168个分析.

我想提取具有相同Assay和Sample的多个条目的行.我希望结果数据位于包含所有重复条目的数据框中,进行排序以使重复项彼此相邻.从上面的示例中,结果将如下所示:

      Assay   Genotype   Sample    Result
1     001        G         1         0
4     001        NA        1         NA
6     002        G         2         1
7     002        T         2         0 
Run Code Online (Sandbox Code Playgroud)

dar*_*zig 5

演示数据,便于加载:

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"))
Run Code Online (Sandbox Code Playgroud)

您可以轻松地获得重复的Assay/Sample对duplicated:

vars <- c('Assay', 'Sample')
dup <- df[duplicated(x[, vars]), vars]
Run Code Online (Sandbox Code Playgroud)

导致:

> dup
  Assay Sample
4     1      1
7     2      2
Run Code Online (Sandbox Code Playgroud)

这需要一个简单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
Run Code Online (Sandbox Code Playgroud)