我想创建一个时间序列每日数据(从2006年1月1日至2018年12月31日- 4749行)在255个不同的地点从研究地区。因此,所需的表(如下面所示,表1)应该在255个唯一的位置重复使用2006年1月1日至31dec2018 (总计: 1210995行)的日期行。稍后,我希望使用另一个数据(如下面表2所示)连接这个新表,该数据在每个位置的255列中填充了日温度值。以下是我的数据应该是什么样子:
表1 表1所需的最终时间序列表将日期表示为255个不同位置的块,使用temp变量作为新列。
(
日期定位温度值Chunk_id 1/1/2006 Location1 29.6oC 1。Location1 ..1.Location1 ..1.。。。。2018年1月31日。。1 1/1/2006 Location2 32.1oC2。Location2 31.1oC2。Location2 ..2018年1月31日.2)
以下是我想要转换的数据
表2
(日期:1 Location2 .Location255 1/1/2006 29.6oC 32.1oC 31.1oC 1/2/2006 32.0oC 33.1oC 32.5oC1/3/2006年35.6oC 34.1oC 34.2oC。。。。。。。。
。。。。2007年1月1日。。。2007年2月1日。。。2007年3月1日。。。)
请注意,我仍然在与R的斗争,所以一个全面的答案将受到高度赞赏。非常感谢。
发布于 2020-09-27 21:19:43
这是我想出的代码,它可以将数据的形状从您必须的格式转换为您想要的格式。您必须进一步澄清的一件事是,“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专栏的信息。我不明白为什么会有这个必要。根据您提供的示例,它似乎包含与location列相同的值。
首先,我建议使用datatable包,因为它非常快,其次,它的语法非常简洁。假设您有一个csv文件,您只需以这种方式导入它(确保您位于正确的目录或包含完整/绝对文件名):
df <- fread('your_file.csv')下一步只是将数据从宽格式重新格式化为长格式。这是由datatable的melt函数完成的,并且是转换数据的关键步骤。如您所见,id列(名为id.vars)是您的“日期”列。下一步是提取每个位置的数量。在最初的df中,列名为'location1‘、'location2’等等。在最后的df中,我只看到了每个位置的数目,因此我们从包字符串中提取了带有strings_sub函数的最后一个字符。最后,我们将用datatable中的setnames函数重命名这些列。首先是旧的列名,然后是新的列名。这意味着“变量”列被重命名为“Location”。
如果你现在能够转换你的数据,请告诉我。
https://stackoverflow.com/questions/64092708
复制相似问题