使用 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的时候没有问题:
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
如果我们将这个数据帧转换为坐标,它就可以工作,因为没有 NA:
coordinates(df) <- c("x_coordinate", "y_coordinate")
现在假设我们只想在坐标中变换 df 的一个子集,例如,只变换巴黎。如果我们这样做:
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有很大区别' [
operator:
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
我有带坐标的数据,没有缺失值。我想使用 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的时候没有问题:
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
如果我们将这个数据帧转换为坐标,它就可以工作,因为没有 NA:
coordinates(df) <- c("x_coordinate", "y_coordinate")
现在假设我们只想在坐标中变换 df 的一个子集,例如,只变换巴黎。如果我们这样做:
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有很大区别' [
operator:
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