【问题标题】:Extracting duplicate lines from a data frame从数据框中提取重复行
【发布时间】:2011-12-11 04:53:57
【问题描述】:

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

      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 和 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 

【问题讨论】:

    标签: r dataframe extraction


    【解决方案1】:

    易于加载的演示数据:

    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 轻松获得重复的 Assay/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
    

    【讨论】:

      猜你喜欢
      • 2020-08-06
      • 1970-01-01
      • 2019-03-19
      • 2017-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      相关资源
      最近更新 更多