我有一张表,其中包含给定坐标参考系统中的位置参考以及x和y坐标。我想把它变成一个简单的特征数据框。我该如何创建?

我认为可能是:

data_frame(place = "London",
           lat = 51.5074, lon = 0.1278,
           epsg = 4326) %>%
  group_by(place) %>%
  mutate(feature = st_point(c(lon, lat)))


但这会导致错误:


mutate_impl(.data,点)中的错误:列feature必须为长度1(组大小),而不是2


这可能很简单,我只是在文档中没有看到它容易讨论。默认情况下,大多数空间分析师似乎都要求更好的数据:)。

我还想尝试一下:

data_frame(place = "London",
           lat = 51.5074, lon = 0.1278,
           epsg = 4326) %>%
  group_by(place) %>%
  do(with(., {
    p <- st_point(c(lon, lat))
    pcol <- st_as_sfc(p)
    st_as_sf(data_frame(place = place,
                        point = pcol),
             crs = epsg)
  }))


在管道的最后,我想要一个可以像其他任何东西一样绘制和操纵的简单要素数据框。

我尝试做的另一件事是,我有一个带有EPSG列的数据框。我需要为每个地方创建此简单要素数据框,然后将它们组合成一个更大的简单要素数据框。

最佳答案

更新
@Franz Plumpton的答案是单个epsg的正确正确的解决方案。仅在data.frame的每一行具有不同的epsg时,才需要下面的答案。否则,这将是重复项(如上面@Henrik所指出)。

library(sf)
library(tibble)

df <- data_frame(place = c("London", "Kalamazoo"),
           lat = c(51.5074, 396088), lon = c(0.1278, 5452158),
           epsg = c(4326, 32610))

l <- lapply(unique(df$place), function(x){
  df <- df[df$place == x,]
  epsg <- df$epsg[1]
  df  <-  st_as_sf(df, coords = c('lon', 'lat'), crs = epsg)
})


然后,您可以将所有内容转换为相同的epsg,然后合并为一个data.frame:

do.call(rbind, lapply(l, function(x) x <- st_transform(x, 4326)))

关于r - 怎样使一个数据框变成一个简单的特征数据框?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49181715/

10-12 17:33
查看更多