繁体   English   中英

使用 sp 定义坐标:有关缺失值的错误消息,但没有 NA 数据。 为什么?

[英]Define coordinates using sp: error message about missing values, but no NA data. Why?

我有坐标数据,没有缺失值。 我想将它们定义为使用 sp 的坐标,但用于数据的子集。 当我使用

subset_of_data <- data[data$variable == x, ]
coordinates_from_data = subset(subset_of_data, select=c("S_X", "S_Y"))
coordinates(coordinates_from_data) <- c("S_X", "S_Y")

我得到:

Error in `coordinates<-`(`*tmp*`, value = c("S_X", "S_Y")) : 
coordinates are not allowed to contain missing values

但是当我使用子集时,没有问题:

subset_of_data <- subset(data, data$variable == x)
coordinates_from_data = subset(subset_of_data, select=c("S_X", "S_Y"))
coordinates(coordinates_from_data) <- c("S_X", "S_Y")

我没有得到错误。

知道为什么会这样吗?

它与sp无关; 这就是 R 中子集的工作方式。 举个例子:

df <- data.frame(city = c("Paris", "Berlin", NA),
                 x_coordinate = c(48.8589507, 52.5069312, 50.8550625), 
                 y_coordinate = c(2.27702, 13.1445501, 4.3053501))
df
    city x_coordinate y_coordinate
1  Paris     48.85895      2.27702
2 Berlin     52.50693     13.14455
3   <NA>     50.85506      4.30535

如果我们将这个 dataframe 转换为坐标,它可以工作,因为没有 NA:

coordinates(df) <- c("x_coordinate", "y_coordinate")

现在让我们想象一下,我们只想在坐标中变换 df 的一个子集,例如,只有 Paris。 如果我们这样做:

sub_df = df[df$city == "Paris", ]

我们得到:

    city x_coordinate y_coordinate
1  Paris     48.85895      2.27702
NA  <NA>           NA           NA

在这种情况下,转换为坐标不再起作用,因为子集变量包含 NA 值,而子集在坐标变量中创建 NA 值。

coordinates(sub_df) <- c("x_coordinate", "y_coordinate")
Error in `coordinates<-`(`*tmp*`, value = c("X_coordinate", "Y_coordinate" : 
  coordinates are not allowed to contain missing values

subset的工作方式不同:

sub_df_2 = subset(df, df$city == "Paris")
sub_df_2
          coordinates  city
1 (48.85895, 2.27702) Paris

另一种选择是在使用[时更具体:

sub_df_3 = df[df$city == "Paris" & !is.na(df$city), ]
sub_df_3
          coordinates  city
1 (48.85895, 2.27702) Paris

对于 Python 用户

它与 Pandas 的[运算符完全不同:

import pandas as pd
import numpy as np

df = pd.DataFrame({'city': ['Paris', 'Berlin', np.NaN],
                   'x_coordinate': [48.8589507, 52.5069312, 50.8550625],
                   'y_coordinate': [2.27702, 13.1445501, 4.3053501]})

print(df[df["city"] == 'Paris'])

    city  x_coordinate  y_coordinate
0  Paris     48.858951       2.27702

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM