【问题标题】:Spreading my dataframe with multiple unique identifiers使用多个唯一标识符传播我的数据框
【发布时间】:2021-07-26 05:18:14
【问题描述】:

我正在尝试创建一个数据框来传播我的数据框:

my_data1 <- data.frame(Tank = c("1A", "1D", "1F", "1A", "1F", "2A"), Bag = c("C1", "C2", "C2", "C1", "C2", "T1"), name = c("ally", "ally", "nancy", "ted", "mark", "ted"), deformity=c("spinal", "eye", "snout", "spinal", "head", "eye"))

到这里:

my_data2 <- data.frame(Tank = c("1A", "1D", "1F", "2A"), Bag = c("C1", "C2", "C2", "T1"), ally_deformity = c("spinal", "eye", NA, NA), nancy_deformity=c(NA, NA, "snout", NA), ted_deformity=c("spinal", NA, NA, "eye"), mark_deformity=c(NA, NA, "head", NA))

所以我希望“坦克”和“袋”列成为我的唯一标识符,而其他每一列都是每个人为该特定罐和袋找到的畸形。我一直在尝试 tidyr 的传播,但没有成功。

【问题讨论】:

    标签: r tidyr spread


    【解决方案1】:

    使用dcast 的data.table 选项

    dcast(setDT(my_data1), Tank + Bag ~ paste0(name, "_deformity"))
    

    给予

       Tank Bag ally_deformity mark_deformity nancy_deformity ted_deformity
    1:   1A  C1         spinal           <NA>            <NA>        spinal
    2:   1D  C2            eye           <NA>            <NA>          <NA>
    3:   1F  C2           <NA>           head           snout          <NA>
    4:   2A  T1           <NA>           <NA>            <NA>           eye
    

    【讨论】:

      【解决方案2】:

      使用基础 R,您可以:

      reshape(my_data1, v.names = "deformity", timevar = "name", dir="wide", idvar = "Tank", sep="_")
      
        Tank Bag deformity_ally deformity_nancy deformity_ted deformity_mark
      1   1A  C1         spinal            <NA>        spinal           <NA>
      2   1D  C2            eye            <NA>          <NA>           <NA>
      3   1F  C2           <NA>           snout          <NA>           head
      6   2A  T1           <NA>            <NA>           eye           <NA>
      

      【讨论】:

        【解决方案3】:

        我们可以使用pivot_wider

        library(dplyr)
        library(tidyr)
        library(stringr)
        my_data1 %>%
          mutate(name = str_c(name, '_deformity')) %>%
          pivot_wider(names_from = name, values_from = deformity)
        

        -输出

        # A tibble: 4 x 6
        #  Tank  Bag   ally_deformity nancy_deformity ted_deformity mark_deformity
        #  <chr> <chr> <chr>          <chr>           <chr>         <chr>         
        #1 1A    C1    spinal         NA              spinal        NA            
        #2 1D    C2    eye            NA              NA            NA            
        #3 1F    C2    NA             snout           NA            head          
        #4 2A    T1    NA             NA              eye           NA            
         
        

        【讨论】:

          猜你喜欢
          • 2012-04-24
          • 2021-08-25
          • 2017-05-24
          • 1970-01-01
          • 2020-04-05
          • 2011-05-20
          • 2016-10-13
          • 2016-10-19
          • 1970-01-01
          相关资源
          最近更新 更多