我想将缺少数据的最后一列(当前数据集中)移到行(所需数据集中)。我浏览了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
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创建