Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将时间序列转换为R中的数据帧_R_Dataframe_Type Conversion_Time Series - Fatal编程技术网

将时间序列转换为R中的数据帧

将时间序列转换为R中的数据帧,r,dataframe,type-conversion,time-series,R,Dataframe,Type Conversion,Time Series,我有一个月列的时间序列和30行的年值,我试图转换成一个数据框架。问题是,当执行此操作时,代码会反转列和行的值,我不知道如何阻止这种情况发生。我使用的代码如下: data.frame(matrix(data = spi_ts_12,nrow = 30, ncol = 12)) 原始时间序列的一部分如下所示: spi_ts_12 Jan Feb Mar Apr May Jun

我有一个月列的时间序列和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
列并使用
tidyr::pivot\u 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) 
textData%
枢轴长度(-year,name_to=“month”,values_to=“value”)
头部(潮间带,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 
>头部(潮汐数据,10)
#一个tibble:10x3
年月价值
2001年1月1日
2001年2月2日
2001年3月3日
2001年4月4日
2001年5月5日
2001年6月2日
2001年7月7日
2002年1月8日-0.0727
2002年2月9日340
2002年3月10日0.536

此时,每行每月包含一个值。

您的解决方案可能是
byrow=TRUE

比较两个数据集,似乎数据集1中的第一行现在位于数据集2的第一列<代码>矩阵正在以列方式读取
spi\u ts\u 12
中的值,如果希望它们以行方式读取,则需要设置
byrow=TRUE

以下是一个例子:

m <- 1:10

# That's what your code does
data.frame(matrix(m, ncol = 2, nrow = 5))
X1 X2
1  1  6
2  2  7
3  3  8
4  4  9
5  5 10

# That's what it should do
data.frame(matrix(m, ncol = 2, nrow = 5, byrow = TRUE))
X1 X2
1  1  2
2  3  4
3  5  6
4  7  8
5  9 10


m你说的是
xts
时间序列吗?其他答案把这一点想得太多了,却忽略了真正的问题-
数据。frame
不是一个转换函数


您希望
as.data.frame()
-
xts
定义为.data.frame.xts
S3方法。

你确定你的数据有12列是在
矩阵调用中指定的吗?请按照标记页顶部的指示,使用
dput
显示你的输入,以便我们准确地知道你有什么。是的,我意识到我没有使用转换功能。谢谢你的提示!