r - 在R中将时间序列转换为数据框
问题描述
我有一个包含每月列和 30 行的时间序列,其中包含我试图转换为数据框的值。问题是,当这样做时,代码会反转列和行的值,我不知道如何阻止这种情况发生。我正在使用的代码是这样的:
data.frame(matrix(data = spi_ts_12,nrow = 30, ncol = 12))
原始时间序列的一部分如下所示:
spi_ts_12
Jan Feb Mar Apr May Jun Jul
1 NA NA NA NA NA NA NA
2 -0.072716360 0.339857586 0.536179857 1.224146721 1.066812903 0.903041290 1.495927052
3 1.874687022 1.842638334 1.822894060 1.289273431 0.931882600 1.046589831 0.459839100
4 0.924828112 1.130954986 1.156797627 1.417022228 1.888921382 1.528365517 1.260246481
5 0.072198409 -0.406376694 -0.510880719 -0.954572806 -1.606281038 -1.019738846 -1.041013230
但是像这样的东西我得到了代码
data.frame(matrix(data = spi_ts_12,nrow = 30, ncol = 12))
X1 X2 X3 X4 X5 X6 X7
1 NA 0.45983910 -0.68314309 -0.71271456 0.573582434 -0.262227248 0.64884425
2 NA 0.14786275 -0.77433962 -0.22896126 0.532289278 -0.238559810 0.65724941
3 NA 0.20082562 -0.32444436 -0.57079826 0.642000515 -0.323273642 1.23843136
4 NA 0.13612275 -0.40369149 -0.34258291 1.159903215 -1.346109264 1.89273535
解决方案
根据后续步骤中数据的分析方式,将其转换为窄格式的整洁数据框可能是合适的,其中每一行都是year
和的唯一组合month
。
可以通过添加一year
列并使用tidyr::pivot_longer()
. 我们从问题中提供的数据开始,如下所示。由于我们不知道起始年份,我们假设第一行是 2001 年。
textData <- "rowId Jan Feb Mar Apr May Jun Jul
1 NA NA NA NA NA NA NA
2 -0.072716360 0.339857586 0.536179857 1.224146721 1.066812903 0.903041290 1.495927052
3 1.874687022 1.842638334 1.822894060 1.289273431 0.931882600 1.046589831 0.459839100
4 0.924828112 1.130954986 1.156797627 1.417022228 1.888921382 1.528365517 1.260246481
5 0.072198409 -0.406376694 -0.510880719 -0.954572806 -1.606281038 -1.019738846 -1.041013230"
df <- read.table(text = textData,header=TRUE)
library(tidyr)
library(dplyr)
tidyData <- df %>% mutate(year = 2000 + rowId) %>%
select(!contains("rowId")) %>%
pivot_longer(-year,names_to="month",values_to="value")
head(tidyData,10)
...以及前几行输出:
> head(tidyData,10)
# A tibble: 10 x 3
year month value
<dbl> <chr> <dbl>
1 2001 Jan NA
2 2001 Feb NA
3 2001 Mar NA
4 2001 Apr NA
5 2001 May NA
6 2001 Jun NA
7 2001 Jul NA
8 2002 Jan -0.0727
9 2002 Feb 0.340
10 2002 Mar 0.536
此时,每一行每月包含一个值。
推荐阅读
- android - 无法使用不同的 build.gradle 文件构建
- vue.js - vue.js 渲染错误:“TypeError:无法读取未定义的属性‘宽度’”vuetify
- bash - socat 隧道通过 ssh 到名称中带有冒号字符“:”的套接字。如何逃脱它?
- r - nanar::impute_below_all() 函数如何填充数字?
- javascript - 取消订阅 AsyncSubject?
- typescript - TypeScript - Puppeteer 库错误:“找不到名称‘元素’”
- python - 来自熊猫数据框的散点图上的 Matplotlib 图例
- php - IIS SERVER curl_setopt_array():无法创建临时文件
- php - 如何使用 f3 beforeroute() 检查登录用户,重定向到登录然后返回原始路由?
- python - 在 Maya 的 liveMode 中从用户启动的 QuadDraw 工具中查询一个值