【问题标题】:Add time variable to a Spatial Polygons data frame list in R将时间变量添加到 R 中的空间多边形数据框列表
【发布时间】:2015-07-02 22:15:44
【问题描述】:

我有一个在不同日期收集的空间多边形数据框列表。我想在列表中的每一天添加时间,这样我就可以对“Z”(DDD.LFRP)变量进行子集化和基于时间/日期的方法。 下面是空间多边形列表的一个子集:

[[1]]
class       : SpatialPolygonsDataFrame 
features    : 128 
extent      : -127.44, -67.8964, 1.000039, 31.71804  (xmin, xmax, ymin,  ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
variables   : 1
names       : DDD.LFRP 
min values  :     16.6 
max values  :    488.5 

[[2]]
class       : SpatialPolygonsDataFrame 
features    : 126 
extent      : -129.04, -67.8964, 3.759985, 31.71804  (xmin, xmax, ymin,  ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
variables   : 1
names       : DDD.LFRP 
min values  :       14 
max values  :    335.2 

请问如何添加添加时间/日期? 时间戳是根据文件名的一组字符串子集创建的:

##Define date string
regexp2<-"_([[:digit:]]{12})"
DatesDL3<-sapply(names(DL3),    function(x)stri_extract_first_regex(x,regexp2))
DatesL<-gsub("_", "", DatesDL3)
DDO2<-data.frame(DatesL)
DDO3<-DDO2[["DatesL"]]
#COnvert straight to dates
Timex<-strptime(DDO3, "%Y%m%d%H%M")
Timex
[1] "2008-12-01 04:00:00 GMT" "2008-12-01 06:30:00 GMT"

然后我尝试了@RobertH写的代码

polsdatetime <- lapply(1:length(DL3), function(i) {
p <- DL3[[i]]
p$datetime <- Timex[i]
p
})

polsdatetime
[[1]]
class       : SpatialPolygonsDataFrame 
features    : 119 
extent      : -124.23, -68.26758, 2.141337, 31.80002  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
variables   : 2
Error in as.matrix.data.frame(X) : 
dims [product 119] do not match the length of object [130]

【问题讨论】:

  • 您要为列表中的每个SpatialPolygonsDataFrame 添加一个timestamp 变量吗?
  • @topsig,是的;对于列表中的每个图层,但不适用于空间多边形数据框图层中的单个多边形。即,上面的两层每一层都有一个日期/时间。
  • 你能用你尝试过的代码更新你的问题吗?它的输出是什么?

标签: r polygon spatial temporal sp


【解决方案1】:

pols 是您的 SpatialPolygons 列表,timestamp 是与 `pols' 长度相同的日期向量:

library(raster)
p <- shapefile(system.file("external/lux.shp", package="raster"))

pols <- list(p,p)
timestamp <- c("2008-12-05 21:30:00 GMT", "2008-12-05 22:45:00 GMT")


polsdatetime <- lapply(1:length(pols), function(i) {
        p <- pols[[i]]
        p$datetime <- timestamp[i]
        p
     } )

polsdatetime     


# [[1]]
# class       : SpatialPolygonsDataFrame 
# features    : 12 
# extent      : 5.74414, 6.528252, 49.44781, 50.18162  (xmin, xmax, ymin, ymax)
# coord. ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 
# variables   : 6
# names       : ID_1,     NAME_1, ID_2,   NAME_2, AREA,                datetime 
# min values  :    1,   Diekirch,    1, Capellen,   76, 2008-12-05 21:30:00 GMT 
# max values  :    3, Luxembourg,   12,    Wiltz,  312, 2008-12-05 21:30:00 GMT 

# [[2]]
# class       : SpatialPolygonsDataFrame 
# features    : 12 
# extent      : 5.74414, 6.528252, 49.44781, 50.18162  (xmin, xmax, ymin, ymax)
# coord. ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 
# variables   : 6
# names       : ID_1,     NAME_1, ID_2,   NAME_2, AREA,                datetime 
# min values  :    1,   Diekirch,    1, Capellen,   76, 2008-12-05 22:45:00 GMT 
# max values  :    3, Luxembourg,   12,    Wiltz,  312, 2008-12-05 22:45:00 GMT 

【讨论】:

  • 我认为你错过了结束 )
  • 它与关闭一起工作。但是,它只是在列表中的第一级。它以变量的形式出现,而不是错误的日期:
  • 我添加了 ) 和示例数据以表明它有效
  • 我知道它与 R spacetime 包有关,但不知道如何写入。我正在尝试使用空间多边形数据框创建一个时空对象,而不仅仅是添加时间作为变量。
  • 谢谢,@RobertH。它终于奏效了。该函数接受“as.POSIXct”而不是“strptime”。但是,我仍然在使用此时间变量生成空间点数据帧时间序列时遇到问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-13
  • 2018-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多