R:使用MATCH函数作为JOIN?

enyaitl3  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(86)

我正在使用R编程语言。
我有下面的map(shapefile):

library(sf)  
library(leaflet)

nc <- st_read(system.file("gpkg/nc.gpkg", package="sf"), quiet = TRUE) %>% 
  st_transform(st_crs(4326)) %>% 
  st_cast('POLYGON')

字符串
现在,假设我有一个数据集,该数据集包含该Map中不同面的信息(我故意丢失了一些区域

set.seed(123)
unemployement_rate = rnorm(nrow(nc), 50,5)
n <- nrow(nc)
n_NA <- round(n * 0.1)
idx <- sample(n, n_NA)
unemployement_rate[idx] 

my_df = data.frame(nc$NAME, unemployement_rate)

**我的问题:**假设以上两个文件都存在。

我想把失业率纳入“nc”档案。我试图以这样的方式合并这两个文件,这样的行数在“nc”将不会改变。
在过去,我习惯使用MATCH函数,如上一个问题(Merging a Shapefile and a dataframe)中所建议的。然而,当我这样做的时候,NA的会被删除。
因此,我试图用不同的方法来解决这个问题:

names(my_df) <- c("NAME", "unemployement_rate")
nc_merged <- merge(nc, my_df, by = "NAME", all.x = TRUE)

# optional : replace the NA with 9999 
# nc_merged$unemployement_rate[is.na(nc_merged$unemployement_rate)] <- 9999


但是,现在与原始文件相比,nc_merge中似乎有更多的行:

> dim(nc)
[1] 108  15
> dim(my_df)
[1] 108   2

> dim(nc_merged)
[1] 128  16

有人能告诉我为什么会发生这种情况,以及我该如何解决这个问题?

谢谢你,谢谢

tag5nh1u

tag5nh1u1#

我误会了。您可以只使用合并函数而不进行聚合

library(sf)

# Read the shapefile
nc <- st_read(system.file("gpkg/nc.gpkg", package = "sf"), quiet = TRUE) %>%
  st_transform(st_crs(4326)) %>%
  st_cast("POLYGON")

# Generate the dataset with unemployment rate
set.seed(123)
unemployment_rate <- rnorm(nrow(nc), 50, 5)
n_NA <- round(nrow(nc) * 0.1)
idx <- sample(nrow(nc), n_NA)
unemployment_rate[idx] <- NA
my_df <- data.frame(NAME = nc$NAME, unemployment_rate)

# Merge the datasets by NAME
nc_merged <- merge(nc, my_df, by = "NAME", all.x = TRUE)

# View the dimensions of the merged dataset
dim(nc) # Original nc dataset
dim(nc_merged) # Merged dataset

字符串

相关问题