在 R 中准备时序数据

Preparing time series data in R

提问人:Amrit 提问时间:9/1/2021 更新时间:9/1/2021 访问量:73

问:

我有一个以 .txt 格式保存的降雨数据文件

Year   1,   2,   3,   4,   ................365, 366
1981   1.0, 0.0, 0.0, 0.0, ................1.2, 0.0
1982   0.8, 0.0, 4.5, 2.3,.................0.9, 2.1
.
.
.
.

2015  0.0, 2.3, 8.7, 2.3, .................0.0, 0.0

这里在第一列中包含年份,从第二列开始,降雨量以一年中的天数为单位。

现在我想在 R 中进行降水分析。如何从此数据结构准备时序数据以在 R 中执行时序分析?

非常感谢您的支持。

r 时间序列 数据操作

评论

0赞 Community 9/1/2021
请编辑问题,将其限制为具有足够详细信息的特定问题,以确定适当的答案。

答:

0赞 Park 9/1/2021 #1

我使用这些数据。dummy

dummy <- tibble::tribble(
  ~year,     ~"1",          ~"2",   ~"3", 
  "2016",  1.25,        0.25, 0.25,
  "2017",  1.20,        0.20, 0.20,
  "2018",  1.30,        0.30, 0.30,
  "2019",  1.18,        0.18, 0.18,
)

  year    `1`   `2`   `3`
  <chr> <dbl> <dbl> <dbl>
1 2016   1.25  0.25  0.25
2 2017   1.2   0.2   0.2 
3 2018   1.3   0.3   0.3 
4 2019   1.18  0.18  0.18

然后

melt(dummy) %>% mutate(variable = as.numeric(variable)) %>%
  mutate(date = as.Date(variable-1, origin = paste0(year, "-01-01"))) %>%
  select(date, value) %>% arrange(date)

成为

         date value
1  2016-01-01  1.25
2  2016-01-02  0.25
3  2016-01-03  0.25
4  2017-01-01  1.20
5  2017-01-02  0.20
6  2017-01-03  0.20
7  2018-01-01  1.30
8  2018-01-02  0.30
9  2018-01-03  0.30
10 2019-01-01  1.18
11 2019-01-02  0.18
12 2019-01-03  0.18

为您的数据 #Additional 代码

dummy <- read.table("D:/Rainfall.txt", header = TRUE)
colnames(dummy) <- as.character(c("Year",1:366))
melt(dummy, id.var="Year") %>% 
  mutate(variable = as.numeric(variable), value = as.numeric(str_replace(value, ",", ""))) %>%
  mutate(date = as.Date(variable-1, origin = paste0(Year, "-01-01"))) %>%
  select(date, value) %>% arrange(date)

head结果就像

        date value
1 1981-01-01   1.0
2 1981-01-02   0.0
3 1981-01-03   0.0
4 1981-01-04   0.0
5 1981-01-05   0.0
6 1981-01-06   0.9

评论

0赞 Amrit 9/1/2021
感谢您@Park的快速回复。我尝试了您的建议,但它在我的数据集上不能完美运行。我认为这是由于我准备的原始数据和虚拟数据的结构。由于我已经将原始数据上传到Dropbox上,这是 dropbox.com/s/amy49ky2thrucsz/Rainfall.txt?dl=0 链接。您能否建议对脚本进行修改以处理我的数据。提前感谢您的支持。
0赞 Park 9/1/2021
@Amrit我会尝试使用您的数据并再次回复。谢谢。