我将一个shapefile作为dataframe
上传到R
中,其中的两个列分别是X1
和X5
,从这两个列中,我使用dplyr
创建了一个新的列class
。代码在某种程度上是有效的,但是在新列中有NA
值,其中假定有X1
值。如何解决这个问题?
包含感兴趣列的示例数据
FID X1 X5 class
1 VEG PRPU
2 VEG PRPU
3 VEG PRPU
4 VEG PRPU
5 WTR NA
6 WTR NA
7 WTR NA
8 VEG PLSE
9 VEG PLSE
10 GRND NA
11 GRND NA
使用str(df)
的数据类型信息
Classes ‘sf’ and 'data.frame': 211 obs. of 8 variables:
$ id : num NA NA NA NA NA NA NA NA NA NA ...
$ X1 : chr "VEG" "VEG" "VEG" "VEG" ...
$ X2 : chr "GRN" "GRN" "GRN" "GRN" ...
$ X3 : chr "SHRB" "SHRB" "SHRB" "SHRB" ...
$ X4 : chr "DES" "DES" "DES" "DES" ...
$ X5 : chr "PLSE" "PLSE" "PLSE" "PLSE" ...
$ geometry:sfc_POLYGON of length 211; first list element: List of 1
..$ : num [1:7, 1:2] 756524 756524 756524 756524 756524 ...
..- attr(*, "class")= chr [1:3] "XY" "POLYGON" "sfg"
$ class : logi NA NA NA NA NA NA ...
- attr(*, "sf_column")= chr "geometry"
- attr(*, "agr")= Factor w/ 3 levels "constant","aggregate",..: NA NA NA NA NA NA
..- attr(*, "names")= chr [1:6] "id" "X1" "X2" "X3" ...
代码
library(tidyverse)
library(sf)
# Create a new column `class`
df = st_read("/path", "file")
df = df%>% add_column(class = NA)
# Mutate
df = df %>% dplyr::mutate(class = ifelse(X5 == "", X1, X5))
更新的空间数据帧
FID X1 X5 class
1 VEG PRPU PRPU
2 VEG PRPU PRPU
3 VEG PRPU PRPU
4 VEG PRPU PRPU
5 WTR NA NA
6 WTR NA NA
7 WTR NA NA
8 VEG PLSE PLSE
9 VEG PLSE PLSE
10 GRND NA NA
11 GRND NA NA
发布于 2021-07-16 01:15:50
因为列X5
中有NA
值,这些值不完全是空单元格(如ArcGIS
所示)。我不得不稍微调整代码,现在它可以工作了。
library(tidyverse)
library(sf)
# Create a new column `class`
df = st_read("/path", "file")
df = df%>% add_column(class = NA)
# Mutate
df = df %>% dplyr::mutate(class = ifelse(is.na(X5), X1, X5))
https://stackoverflow.com/questions/68402035
复制