【问题标题】:Define coordinates using sp: error message about missing values, but no NA data. Why?使用 sp 定义坐标:有关缺失值的错误消息,但没有 NA 数据。为什么?
【发布时间】:2020-11-13 07:05:40
【问题描述】:

我有坐标数据,没有缺失值。我想将它们定义为使用 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")

我没有得到错误。

知道为什么会这样吗?

【问题讨论】:

  • 什么是 tmp?您在数据准备中使用了任何正则表达式吗?
  • tmp 是 R 内部使用的。具体细节我不是很清楚,但是看stackoverflow.com/questions/28770882/documentation-for-tmp-in-rcran.r-project.org/doc/manuals/r-release/R-lang.html 可以看到坐标stackoverflow.com/a/32586069/762435 不,我没有在我的数据准备中使用正则表达式,但还有很多其他步骤。你有什么想法?
  • 嗨!没有数据就不容易回答你的问题,但请不要The real subset function (subset.data.frame()) removes missing values in the condition。你确定坐标中没有NA吗?也许在条件等于 NA 的行中
  • 感谢您的评论!抱歉,我无法共享数据。是的,你是对的:根据其他 NA 列的条件,我在坐标列中“添加”空/NA 值!坐标列中没有 NA,但在其他条件列中有 NA,如所述,例如在 r-bloggers.com/subsetting-in-the-presence-of-nas 所以解决方案是 subset_of_data
  • 嗨!我认为最好的解决方案是你用(也许)一个显示问题的数据的小例子(比如 2 行)来写答案。

标签: r subset missing-data sp


【解决方案1】:

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 的一个子集,例如,只有 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

【讨论】:

    猜你喜欢
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 2018-05-04
    • 1970-01-01
    相关资源
    最近更新 更多