如何在R中创建SpatialPointsDataFrame时保持缺少坐标

时间:2018-03-23 14:35:18

标签: r missing-data sp

我有动物位置(GPS位置,纬度和经度)的数据集,其中一些位置之间缺少坐标。我正在使用R来读取它们并改变它们的投影,但是我想保留这些缺失的坐标点,以便稍后可以对它们进行插值(或者可以进行任何其他操作)。

但是,当我尝试将数据转换为SpatialPointsDataFrame(以后使用spTransform重新投影)时,我收到错误:

  

.local(obj,...)出错:坐标

中的NA值

创建SpatialPointsDataFrame时,有没有办法让这个NA保持在同一个地方?

这里有一些可重现的代码:

mov.data <- data.frame(x = c(-49.8427, -49.85003, NA, -49.84685),
                       y = c(-21.30366, -21.29498, NA, -21.2944),
                       time = 1:4, ID = 1)

mov.spdata <- SpatialPointsDataFrame(coords = mov.data[,1:2],
                                     data = mov.data[,3:4])

当我运行它时,我收到上面显示的错误。任何提示?

2 个答案:

答案 0 :(得分:1)

不,sp个对象不允许在坐标中缺少值。

答案 1 :(得分:0)

sp对象不允许坐标中缺少值。 discussed on GitHubEdzer Pebesma的负责人,他也在Stackoverflow上(对此)进行了简要回答。

解决方案:

mov.data <- data.frame(x = c(-49.8427, -49.85003, NA, -49.84685),
                       y = c(-21.30366, -21.29498, NA, -21.2944),
                       time = 1:4, ID = 1)

# If there are NA values, replace them by 0 and add a column to keep information
mov.data$is_na = ifelse(is.na(mov.data$x), TRUE, FALSE)
index = mov.data$is_na == TRUE
mov.data[index, "x"] <- 0
mov.data[index, "y"] <- 0

mov.data <- SpatialPointsDataFrame(coords = mov.data[, 1:2],
                                   data = mov.data[, 3:5])

您得到:

            coordinates time ID is_na
1  (-49.8427, -21.30366)    1  1 FALSE
2 (-49.85003, -21.29498)    2  1 FALSE
3                 (0, 0)    3  1  TRUE
4  (-49.84685, -21.2944)    4  1 FALSE

然后,利用这些信息,您可以进行所需的所有转换,例如将结果写入CSV文件或所需的任何格式。