如何在r中进行列拆分和dcast
我在r中有以下数据帧如何在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
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