首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过非sf列内连接两个sf对象

通过非sf列内连接两个sf对象
EN

Stack Overflow用户
提问于 2018-02-28 14:45:04
回答 1查看 3.9K关注 0票数 5

我试图连接两个sf数据帧使用内连接或左连接。这些数据文件中都有几何图形列。我不断地发现错误:

check_join(x,y)中的错误:y应该是data.frame;对于空间连接,使用st_joinFALSE

可复制的例子如下:

代码语言:javascript
复制
df1 <- data.frame(
  var = c("a", "b", "c"),
  lon1 = c(20,35,45),
  lat1 = c(50,10,15)
) %>% st_as_sf(coords = c("lon1", "lat1"), dim = "XY") %>%
  st_set_crs(4326)

df2 <- data.frame(
  var = c("a", "b", "c"),
  lon2 = c(15,25,35),
  lat2 = c(5,10,15)
) %>% st_as_sf(coords = c("lon2", "lat2"), dim = "XY") %>%
  st_set_crs(4326)

df <- inner_join(df1, df2, by = "var")

我不想放弃几何学,因为我认为这会影响我的结果,但任何解决方案都是受欢迎的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-28 17:48:33

如果你只想做一个非空间的连接,但是向前移动几何列,你可以先“禁用”它们(例如as.data.frame()),连接,然后‘重新激活’你想要激活的几何图形列。现在,您的data.frame中有两个sfc列,但是‘几何图形x’是活动的。

代码语言:javascript
复制
df <- inner_join(df1 %>% as.data.frame(), df2 %>% as.data.frame(), by = "var")

df %<>% st_sf(sf_column_name = 'geometry.x')

> str(df)
Classes ‘sf’ and 'data.frame':  3 obs. of  3 variables:
 $ var       : Factor w/ 3 levels "a","b","c": 1 2 3
 $ geometry.x:sfc_POINT of length 3; first list element: Classes 'XY', 'POINT', 'sfg'  num [1:2] 20 50
 $ geometry.y:sfc_POINT of length 3; first list element: Classes 'XY', 'POINT', 'sfg'  num [1:2] 15 5
 - attr(*, "sf_column")= chr "geometry.x"
 - attr(*, "agr")= Factor w/ 3 levels "constant","aggregate",..: NA NA
  ..- attr(*, "names")= chr  "var" "geometry.y"

> st_crs(df)
    Coordinate Reference System:
      EPSG: 4326 
      proj4string: "+proj=longlat +datum=WGS84 +no_defs"
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49032217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档