如何在r中进行列拆分和dcast

如何在r中进行列拆分和dcast,r,R,我在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

我在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里做呢

这里有一种可能性

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.
库(tidyverse)
df%>%
分隔行(天气)%>%
分组单位(日期)%>%
突变(n=1)%>%
摊铺(天气、n、填充=0)
##一个tibble:6x4
##分组:日期[6]
#日期雾雨雷暴
#                 
#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.    01.
#5 2018-01-05    1.    1.0
#6 2018-01-06    0.    1.1.

splitstackshape
对于此类任务非常有用,这里我们使用函数
cSplit\u 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))
df