使用tidyr包将数据列重整为行和/或在R中重整形状

问题描述 投票:1回答:1

我想将缺少数据的最后一列(当前数据集中)移到行(所需数据集中)。我浏览了reshape,reshape2和tidyr的软件包。 tidyr包中的功能collect()应该是解决方案,但到目前为止我还无法解决。有什么建议吗?提前致谢。

当前数据集:]

  date       citycode cityname       cases deaths cases_03_04
1 01-04-2020        1 city1            197      3         241
2 01-04-2020        2 city2             26      0          32

所需数据集:]

  date       citycode cityname       cases deaths
1 01-04-2020        1 city1            197      3         
2 01-04-2020        2 city2             26      0          
3 03-04-2020        1 city1            241     na
4 03-04-2020        2 city2             32     na
r dataframe dataset reshape tidyr
1个回答
0
投票

data.table解决方案。

逻辑应该类似于使用tidyr,否则有一种简单的方法。

library(data.table)
dt <- fread('date citycode cityname cases deaths cases_03_04
01-04-2020 1 city1 197 3 241
01-04-2020  2 city2 26 0 32')


wdt <- dcast(dt,...~date,value.var = "cases")

wdt
#>    citycode cityname deaths cases_03_04 01-04-2020
#> 1:        1    city1      3         241        197
#> 2:        2    city2      0          32         26
setnames(wdt,old = "cases_03_04",new = "03-04-2020")

ldt <- melt(wdt,measure.vars = patterns("2020$"),variable.name = "date",value.name = "cases")

ldt[date=="03-04-2020",deaths:=NA][]
#>    citycode cityname deaths       date cases
#> 1:        1    city1     NA 03-04-2020   241
#> 2:        2    city2     NA 03-04-2020    32
#> 3:        1    city1      3 01-04-2020   197
#> 4:        2    city2      0 01-04-2020    26

reprex package(v0.3.0)在2020-04-17创建

© www.soinside.com 2019 - 2024. All rights reserved.