r - 在 R 中创建 BIG 时空时间序列数据
问题描述
我想在研究区域的 255 个不同位置创建一个时间序列每日数据框(从 2006 年 1 月 1 日到 2018 年 12 月 31 日 - 4749 行)。因此,所需的表(如下所示,表 1)应该在 255 个唯一位置具有重复的日期行,从 1Jan2006 到 31dec2018(总计:1210995 行)。我稍后想将这个新表与另一个数据(如下所示,表 2)连接起来,该数据在每个位置的 255 列中填充了每日温度值。这是我的数据的样子:
表 1 表 1 所需的最终时间序列表将日期表示为 255 个不同位置的块,其中临时变量作为新列
(
Date Location Temp Value Chunk_id 1/1/2006 Location1 29.6oC 1 . 位置 1 .. 1 . 位置 1 .. 1 . .. .. 1 1/31/2018 .. .. 1 1/1/2006 地点 2 32.1oC 2 . 位置 2 31.1oC 2 。位置 2 .. 2 2018 年 1 月 31 日 ... .. 2 )
这是我拥有并想要转换的数据
表 2
( 日期 地点 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 ...... ...... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ( )
请注意,我仍在为 R 苦苦挣扎,因此非常感谢您提供全面的答案。太感谢了。
解决方案
这是我想出的代码,它应该将数据的形状从您拥有的格式转换为您想要的格式。您必须进一步澄清的一件事是“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 中,我只看到了每个位置的编号,因此我们使用strings_sub
stringr 包中的函数提取了最后一个字符。最后,我们将使用数据表中的setnames
函数重命名列。首先你有旧的列名,然后是新的列名。这意味着“变量”列被重命名为“位置”。
如果您现在能够转换数据,请告诉我。
推荐阅读
- kotlin - 协程作用域构造函数内协程上下文的 Kotlin 组合
- reactjs - 运行 npm start 时出现以下错误。我已经尝试重新构建代码,但我仍然得到它
- r - 如何将作为列表读取的闪亮输出对象转换为数据框?
- php - 将 fopen/fwrite 转换为 WordPress WP_Filesystem
- javascript - 在 json 对象中转换 php 数组的最佳方法(而不是在 json 单个文件中)
- powerbi - 平均复杂
- haskell - 如何使用 Haskell 中间件添加 HTTP 请求正文的请求和响应的特定表示
- angular - 在 Angular 应用程序中代理 Firebase api 调用
- angular - Angular ngxs 单元测试调度不起作用
- php - 照常共享到服务帐户,从日历 API 查询时,日历不会出现在列表中