r-转换日期数据帧



我有一个数据帧,看起来像这样:

County    2020-01-22  2020-01-23  2020-01-24
Autauga   0           1           0
Baldwin   0           2           4
Barbour   0           3           1

然而,我想重新格式化它,这样我就可以按县每天计数。类似这样的东西:

County   year  month  day  value 
Autauga  2020  01     22   0
Baldwin  2020  01     22   0
Barbour  2020  01     22   0
Autauga  2020  01     23   1
Baldwin  2020  01     23   2
Barbour  2020  01     23   3
Autauga  2020  01     24   0
Baldwin  2020  01     24   4
Barbour  2020  01     24   1

我们可以只使用pivot_longer并指定names_sep

library(tidyr)
pivot_longer(df1, cols = -County, 
names_to = c("year", "month", "day"), names_sep = "-")

-输出

# A tibble: 9 x 5
#  County  year  month day   value
#  <chr>   <chr> <chr> <chr> <int>
#1 Autauga 2020  01    22        0
#2 Autauga 2020  01    23        1
#3 Autauga 2020  01    24        0
#4 Baldwin 2020  01    22        0
#5 Baldwin 2020  01    23        2
#6 Baldwin 2020  01    24        4
#7 Barbour 2020  01    22        0
#8 Barbour 2020  01    23        3
#9 Barbour 2020  01    24        1

数据

df1 <- structure(list(County = c("Autauga", "Baldwin", "Barbour"), 
`2020-01-22` = c(0L, 
0L, 0L), `2020-01-23` = 1:3, `2020-01-24` = c(0L, 4L, 1L)), 
class = "data.frame", row.names = c(NA, 
-3L))

这行吗:

library(dplyr)
library(tidyr)
df %>% pivot_longer(!County, names_to = 'date') %>% 
separate(date, into = c('year','month','day'), sep = '-') %>% arrange(day)
# A tibble: 9 x 5
County  year  month day   value
<chr>   <chr> <chr> <chr> <dbl>
1 Autauga 2020  01    22        0
2 Baldwin 2020  01    22        0
3 Barbour 2020  01    22        0
4 Autauga 2020  01    23        1
5 Baldwin 2020  01    23        2
6 Barbour 2020  01    23        3
7 Autauga 2020  01    24        0
8 Baldwin 2020  01    24        4
9 Barbour 2020  01    24        1

最新更新