A data.table
решение.
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
tidyr
решение
library(dplyr)
library(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')
df <- tibble(dt)
wdf <- pivot_wider(df,names_from = date,values_from = cases)
names(wdf) <- c("citycode", "cityname", "deaths", "03-04-2020", "01-04-2020")
wdf
#> # A tibble: 2 x 5
#> citycode cityname deaths `03-04-2020` `01-04-2020`
#> <int> <chr> <int> <int> <int>
#> 1 1 city1 3 241 197
#> 2 2 city2 0 32 26
ldf <- pivot_longer(wdf,cols =c("03-04-2020", "01-04-2020"),names_to = "date",values_to = "cases")
ldf %>%
mutate(deaths=ifelse(date=="03-04-2020",NA,deaths))
#> # A tibble: 4 x 5
#> citycode cityname deaths date cases
#> <int> <chr> <int> <chr> <int>
#> 1 1 city1 NA 03-04-2020 241
#> 2 1 city1 3 01-04-2020 197
#> 3 2 city2 NA 03-04-2020 32
#> 4 2 city2 0 01-04-2020 26
Создано в 2020-04-17 пакетом Представить (v0.3.0)