【问题标题】:How to further melt a dataset?如何进一步融合数据集?
【发布时间】:2020-07-05 14:10:36
【问题描述】:

我正在处理以下数据:

#Reproducible Example
Bills <- c("93-HCONRES-106", "93-HCONRES-107", "93-HCONRES-108")
Members <- c("00134", "00416;00010;00017;00026", "00416;00503;00513;00568")

data <- data.frame(Bills, Members)

数据如下所示:

#Data Structure
            Bills                 Members
1 93-HCONRES-106                   00134
2 93-HCONRES-107 00416;00010;00017;00026
3 93-HCONRES-108 00416;00503;00513;00568

我想要扩展数据集,使每个账单对应每个成员。所以数据看起来像这样:

        Bills           Members
93-HCONRES-106          00134
93-HCONRES-107          00416
93-HCONRES-107          00010
93-HCONRES-107          00017
93-HCONRES-107          00026
93-HCONRES-108          00416
93-HCONRES-108          00503
93-HCONRES-108          00513
93-HCONRES-108          00568

您可以分享的任何代码将不胜感激。

非常感谢您的帮助

【问题讨论】:

    标签: r reshape data-manipulation melt


    【解决方案1】:

    我们可以从tidyr使用separate_rows

    library(dplyr)
    library(tidyr)
    data %>% 
         separate_rows(Members)
    #         Bills Members
    #1 93-HCONRES-106   00134
    #2 93-HCONRES-107   00416
    #3 93-HCONRES-107   00010
    #4 93-HCONRES-107   00017
    #5 93-HCONRES-107   00026
    #6 93-HCONRES-108   00416
    #7 93-HCONRES-108   00503
    #8 93-HCONRES-108   00513
    #9 93-HCONRES-108   00568
    

    或者将元素提取到list然后unnest

    library(stringr)
    data %>%
       mutate(Members = str_extract_all(Members, "[^;]+")) %>% 
       unnest(c(Members))
    

    base R

    stack(setNames(strsplit(as.character(data$Members), ";"), data$Bills))
    

    【讨论】:

    • 太好了,效果很好!非常感谢您的帮助!
    【解决方案2】:

    使用data.table:

    library(data.table)
    dt1 <- data.table(Bills, Members)
    dt2 <- melt(dt1[, c("V1", "V2", "V3", "V4") := tstrsplit(Members, ";")][, Members := NULL], id.vars = "Bills")[!is.na(value)][order(Bills)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-20
      • 1970-01-01
      • 2021-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多