【问题标题】:how to do a column split and dcast in r [duplicate]如何在 r [重复] 中进行列拆分和 dcast
【发布时间】:2018-12-10 12:23:05
【问题描述】:

我在 r 中有以下数据框

  Date            Weather
  2018-01-01      Rain,Fog
  2018-01-02      Fog,Rain
  2018-01-03      Rain
  2018-01-04      Thunderstorm
  2018-01-05      Rain,Fog
  2018-01-06      Rain,Thunderstorm

我想要的数据框是

  Date         Rain     Fog      Thunderstorm
  2018-01-01    1        1           0
  2018-01-02    1        1           0
  2018-01-03    1        0           0
  2018-01-04    0        0           1
  2018-01-05    1        1           0
  2018-01-06    1        0           1

我如何在 R 中做到这一点?

【问题讨论】:

    标签: r


    【解决方案1】:

    splitstackshape 包对于此类任务非常有用,这里我们使用函数cSplit_e

    library(splitstackshape)
    cSplit_e(data = df, 
             split.col = "Weather",
             sep = ",",
             mode = "binary",
             type = "character",
             drop = TRUE,
             fill = 0)
    #        Date Weather_Fog Weather_Rain Weather_Thunderstorm
    #1 2018-01-01           1            1                    0
    #2 2018-01-02           1            1                    0
    #3 2018-01-03           0            1                    0
    #4 2018-01-04           0            0                    1
    #5 2018-01-05           1            1                    0
    #6 2018-01-06           0            1                    1
    

    数据

    df <- structure(list(Date = c("2018-01-01", "2018-01-02", "2018-01-03", 
    "2018-01-04", "2018-01-05", "2018-01-06"), Weather = c("Rain,Fog", 
    "Fog,Rain", "Rain", "Thunderstorm", "Rain,Fog", "Rain,Thunderstorm"
    )), .Names = c("Date", "Weather"), class = "data.frame", row.names = c(NA, 
    -6L))
    

    【讨论】:

      【解决方案2】:

      这是tidyverse 的可能性

      library(tidyverse)
      df %>%
          separate_rows(Weather) %>%
          group_by(Date) %>%
          mutate(n = 1) %>%
          spread(Weather, n, fill = 0)
      ## A tibble: 6 x 4
      ## Groups:   Date [6]
      #  Date         Fog  Rain Thunderstorm
      #  <fct>      <dbl> <dbl>        <dbl>
      #1 2018-01-01    1.    1.           0.
      #2 2018-01-02    1.    1.           0.
      #3 2018-01-03    0.    1.           0.
      #4 2018-01-04    0.    0.           1.
      #5 2018-01-05    1.    1.           0.
      #6 2018-01-06    0.    1.           1.
      

      【讨论】:

        猜你喜欢
        • 2018-09-19
        • 1970-01-01
        • 2018-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多