【问题标题】:Creating BIG spatio-temporal time series data in R在 R 中创建 BIG 时空时间序列数据
【发布时间】:2021-01-13 11:26:59
【问题描述】:

我想在研究区域的 255 个不同位置创建一个时间序列每日数据框(从 2006 年 1 月 1 日到 2018 年 12 月 31 日 - 4749 行)。因此,所需的表(如下所示,表 1)应该在 255 个唯一位置具有重复的日期行,从 1Jan2006 到 31dec2018(总计:1210995 行)。我稍后想将这个新表与另一个数据(如下所示,表 2)连接起来,该数据在每个位置的 255 列中填充了每日温度值。以下是我的数据的样子:

表 1 Table 1 Desired final time series table representing dates as chunks at 255 different locations with temp variable as a new column

(

日期位置临时值 Chunk_id 2006 年 1 月 1 日 地点 1 29.6oC 1 .位置 1 .. 1 .位置 1 .. 1 . .. .. 1 2018 年 1 月 31 日 .. .. 1 2006 年 1 月 1 日 地点 2 32.1oC 2 .位置 2 31.1oC 2 .位置 2 .. 2 2018 年 1 月 31 日 ... .. 2 )

这是我拥有并想要转换的数据

表 2

Table 2 Daily Temperature data at various locations given in different fields

( 日期 地点 1 地点 2 ....... 地点 255 2006 年 1 月 1 日 29.6oC 32.1oC 31.1oC 2006 年 1 月 2 日 32.0oC 33.1oC 32.5oC 2006 年 1 月 3 日 35.6oC 34.1oC 34.2oC . . . . . . . .
. . . . 2007 年 1 月 1 日。 . . 2007 年 1 月 2 日。 . . 2007 年 1 月 3 日。 . . )

请注意,我仍在努力使用 R,因此非常感谢您提供全面的答案。非常感谢。

【问题讨论】:

    标签: r database


    【解决方案1】:

    这是我想出的代码,它应该将数据的形状从您拥有的格式转换为您想要的格式。您必须进一步澄清的一件事是“Chunk_ID”列的来源。

    如下所示,我使用 data.table 和 string 包。

    library(data.table)
    library(stringr)
    
    dt <- data.table(Date = c('2006.01.01', '2006.01.02'), 
                     location1 = c(22.2, 24.6),
                     location2 = c(22.5, 24.7))
    
    melted <- melt(dt, id.vars = c('Date')) 
    
    melted[,`:=`(variable = str_sub(variable, 9, 9))]
    
    setnames(melted, c("variable","value"), c("Location","Temperature_values"))
    

    如果您想要除了代码之外的一些描述,请告诉我。

    编辑:附加说明。

    感谢您提供有关 chunk_id 列的信息。我不明白为什么有必要。根据您提供的示例,它似乎包含与位置列相同的值。

    首先我真的推荐使用 datatable 包,因为它非常快,其次它的语法非常简洁。 假设您有一个 csv 文件,您只需以这种方式导入它(确保您在正确的目录中或包含完整/绝对文件名):

    df <- fread('your_file.csv')
    

    下一步只是将数据从宽格式重塑为长格式。这是由数据表的melt 函数完成的,是转换数据的关键步骤。如您所见,id 列(名为 id.vars)是您的“日期”列。 接下来是提取每个位置的编号。在原始 df 中,列名为“location1”、“location2”等。在最终的 df 中,我只看到了每个位置的编号,因此我们使用包 stringr 中的strings_sub 函数提取最后一个字符。 最后,我们将使用数据表中的setnames 函数重命名列。首先你有旧的列名,然后是新的列名。这意味着“变量”列被重命名为“位置”。

    如果您现在可以转换数据,请告诉我。

    【讨论】:

    • 非常感谢您帮助我。是的,您能否提供更多描述。当我试图找出解决方案时,其他人提到使用 chunk_ids 来根据日期对位置数据进行分类。
    • 它的效果非常好,这是我无法弄清楚的数据管理中的一大步。非常感谢。
    猜你喜欢
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    相关资源
    最近更新 更多