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

以天为变量重塑每日时间序列数据集

如何解决以天为变量重塑每日时间序列数据集

在下面的此时间序列数据框中,月份的日期是变量。我想将此数据集从宽变长,但要保持正确的日期格式。

structure(list(Year = c(1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,1994,2016),Month = c(1,1,2,2),day1 = c(0,31,7.4,28.2,12,1.4,18.6,56,0.4,0),day2 = c(0,8.4,65.2,41,5.2,6.8,10.6,9.2,21.6),day3 = c(0,132.4,1.2,10.2,1.6,7.8,2.6,43.4,6.2
    ),day4 = c(0,15.6,34.6,81,13.1,53.2,4,2.4,day5 = c(0,12.4,21,5,47,3,0.6,11.4,day6 = c(8.6,17.2,9.4,5.4,30.5,61,5.7,5.8,day7 = c(0,42,0.2,0.8,7,day8 = c(2,26.4,12.8,43,1.8,13.2,day9 = c(0,7.6,14,23,72.6,6.6,19.4,day10 = c(0,8.2,10.8,2.2,10,2.5,0.4),day11 = c(0,64,29,16.2,27.5,17.6,day12 = c(0,22.4,41.6,5.6,3.6,14.6,81.8,4.4,33,day13 = c(0,3.2,4.2,6,54.2,6.2,16.4,101.2,day14 = c(0,9,12.2,60.6,8,75,6.4,50,day15 = c(0,11.2,8.6,2.8,50.8,21.8,day16 = c(0,33.4,16.6,3.4,21.6,day17 = c(0,10.4,14.2,1.5,11,20.6,22.2,day18 = c(60.6,28.8,59.6,11.8,26,17.8,day19 = c(30,9.8,50.6,13.4,32,29.8,19.6,day20 = c(0,4.8,18.8,46,70,15.2,18.4,60,day21 = c(0,22.8,35,day22 = c(72,31.6,15.4,16,18.2,day23 = c(1.2,37,39,19.2,15,day24 = c(0,14.8,20.4,17,30.8,25.4,41.4,20.8,22.6,23.6,4.6),day25 = c(0,25.2,day26 = c(0,44,56.6,13,4.6,26.6,54.4,day27 = c(0,45.4,16.8,8.8,day28 = c(0,39.4,39.2,7.2,23.2,9.6,day29 = c(0,NA,day30 = c(0,NA),day31 = c(0,102,25,NA
    )),row.names = c(NA,50L),class = "data.frame")

如果我使用melt函数,它将不会考虑将NA值放在错误日期(例如1994-02-30)中的月份的天数。我可以删除带有NA值的行,但是我需要确保我的数据集没有任何NA值。

melt(Data,c("Year","Month")))

我想要的输出是这样的:

Data<- 
Date         Value
1994-01-01     0.1
1994-01-02       0
1994-01-03      12 

解决方法

您可以获取长格式的数据,从列名称中提取数据,组合年,月和日期值以创建实际日期。

library(dplyr)
library(tidyr)

df %>%
  pivot_longer(cols = starts_with('day'),values_drop_na = TRUE) %>%
  mutate(name = readr::parse_number(name)) %>%
  unite(Date,Year,Month,name,sep = '-') %>%
  mutate(Date = as.Date(Date))

# A tibble: 1,487 x 2
#   Date       value
#   <date>     <dbl>
# 1 1994-01-01   0  
# 2 1994-01-02   0  
# 3 1994-01-03   0  
# 4 1994-01-04   0  
# 5 1994-01-05   0  
# 6 1994-01-06   8.6
# 7 1994-01-07   0  
# 8 1994-01-08   2  
# 9 1994-01-09   0  
#10 1994-01-10   0  
# … with 1,477 more rows

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