【问题标题】:R merge data /expand data setR合并数据/扩展数据集
【发布时间】:2019-03-30 13:03:20
【问题描述】:

我正在尝试使用 R 扩展我的数据集。我已经记录了每个样本的观察结果,并根据这些观察结果计算了百分比。我现在需要扩展每个样本以列出每个可能的观察结果,而无需进行任何计算。我的数据示例: 起始数据集:

Sample    Observation    Percent
A         Y              50
A         N              50
B         Y              10
B         N              80
B         Don't know     10 

所需数据集:

Sample    Observation    Percent
A         Y              50
A         N              50
A         Don't know     NA
B         Y              10
B         N              80
B         Don't know     10 

因此,在这种情况下,我需要扩展所有样本 A 以包含“不知道”类别并用“NA”填写。

我试过了

myTable <- table(myData)
TableFrame2 <- data.frame(myTable)

这会扩展数据集但会弄乱百分比列(?为什么)。我以为我可以将百分比合并回来,但我需要将该列与样本和观察列的扩展集相匹配,以获得完全匹配。有什么建议?

【问题讨论】:

    标签: r merge expand


    【解决方案1】:

    一种方法是将组合合并/加入回数据中。 (我稍微修改了数据,以便在 SO 中轻松复制/粘贴。)

    dat <- read.table(header=TRUE, stringsAsFactors=FALSE, text='
    Sample    Observation    Percent
    A         Y              50
    A         N              50
    B         Y              10
    B         N              80
    B         Don_t_know     10 ')
    

    基础R

    merge(
      dat,
      expand.grid(Sample = unique(dat$Sample),
                  Observation = unique(dat$Observation),
                  stringsAsFactors = FALSE),
      by = c("Sample", "Observation"),
      all = TRUE
    )
    #   Sample Observation Percent
    # 1      A  Don_t_know      NA
    # 2      A           N      50
    # 3      A           Y      50
    # 4      B  Don_t_know      10
    # 5      B           N      80
    # 6      B           Y      10
    

    Tidyverse:

    library(dplyr)
    library(tidyr)
    
    dat %>%
      full_join(
        crossing(Sample = unique(dat$Sample), Observation = unique(dat$Observation)),
        by = c("Sample", "Observation")
      )
    #   Sample Observation Percent
    # 1      A           Y      50
    # 2      A           N      50
    # 3      B           Y      10
    # 4      B           N      80
    # 5      B  Don_t_know      10
    # 6      A  Don_t_know      NA
    

    甚至

    dat %>%
      full_join(expand(., Sample, Observation))
    # Joining, by = c("Sample", "Observation")
    #   Sample Observation Percent
    # 1      A           Y      50
    # 2      A           N      50
    # 3      B           Y      10
    # 4      B           N      80
    # 5      B  Don_t_know      10
    # 6      A  Don_t_know      NA
    

    【讨论】:

      猜你喜欢
      • 2020-08-23
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      • 2020-12-06
      • 2017-03-31
      • 2023-04-05
      相关资源
      最近更新 更多