微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

转换日期数据框 数据

如何解决转换日期数据框 数据

我有一个看起来像这样的数据框:

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

解决方法

这项工作:

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
,

我们可以只使用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))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。