首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据帧(或tibble)转换为tsibble的有效方法

将数据帧(或tibble)转换为tsibble的有效方法
EN

Stack Overflow用户
提问于 2020-01-06 03:48:46
回答 3查看 490关注 0票数 1

我想询问有关将数据帧(或tibble)转换为tsibble的最有效方法的建议。

数据帧在第一列中有日期,所有其他列都用在相应日期给出的值表示不同的时间序列。我想高效地创建一个tsibble,其中key =每个时间序列的名称,index =每个日期。

因此,输出将是一个tsibble,如下所示:

代码语言:javascript
复制
Key                  Index             Value
TimeSeriesOne       FirstDate        Value TimeSeriesOne on first date
TimeSeriesOne       SecondDate       Value TimeSeriesOne on second date
......................................................................
TimeSeriesOne       LastDate         Value TimeSeriesOne on last date
TimeSeriesTwo       FirstDate        Value TimeSeriesTwo on first date
......................................................................
TimeSeriesN         LastDate         Value TimeSeriesN on last date

输入数据示例:

代码语言:javascript
复制
numRows <- 15
startDate <- lubridate::as_date('2018-06-10')
endDate <- startDate + base::months(x = numRows-1)
theDates <- base::seq.Date(
    from = startDate,
    to = endDate,
    by = "month")  
inputData <- tibble::tibble(
    "Dates" = theDates,
    "SeriesOne" = stats::rnorm(numRows),
    "SeriesTwo" = stats::rnorm(numRows),
    "SeriesThree" = stats::rnorm(numRows), 
    "SeriesFour" = stats::rnorm(numRows))
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-01-06 04:59:32

你可以使用tidyr转换为“长格式”

代码语言:javascript
复制
tsibble_input <- tidyr::pivot_longer(inputData, cols = -Dates, names_to = "Key", values_to = "Value") 

并获取tsibble

代码语言:javascript
复制
tsibble::as_tsibble(tsibble_input, index = "Dates", key = "Key")
票数 3
EN

Stack Overflow用户

发布于 2020-01-06 04:36:10

我们可以使用data.table中的melt来高效地完成此操作,然后将其转换为tibble

代码语言:javascript
复制
library(data.table)
library(tibble)
as_tibble(melt(setDT(inputData), id.var = 'Dates', variable.name = 'Key', 
      value.name = 'Value')[, Key := paste0("Time", Key)])
票数 1
EN

Stack Overflow用户

发布于 2020-01-06 04:52:44

转换为zoo,然后转换为长数据帧,最后转换为tsibble

代码语言:javascript
复制
library(tsibble)
library(zoo)

inputData %>%
  read.zoo %>%
  fortify.zoo(melt = TRUE) %>%
  as_tsibble(key = "Series", index = "Index")

或者使用stack (或许多其他整形功能中的任何一个,包括整形、熔化、聚集、pivot_longer)来创建长数据帧,然后进行缩略。如果您所说的高效是指最小的前提条件,那么这只使用tsibble包及其依赖项。

代码语言:javascript
复制
library(tsibble)

inputData %>%
  { cbind(.[1], stack(.[-1])) } %>%
  as_tsibble(key = "ind", index = "Dates")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59603629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档