【问题标题】:transform dataframe to sf object using an already formated geometry column使用已格式化的几何列将数据框转换为 sf 对象
【发布时间】:2019-07-02 14:42:30
【问题描述】:

我有一个像这样的数据框(dat),到目前为止,geom_transect 是一个因素。 我想通过指定 geom_transect 是几何列但没有成功将我的数据框转换为 sf 对象。 这是我的桌子

rn   geom_transect
1   c(2.59301435154815, 51.0850974058788)
2   c(2.65908408179987, 51.120810848601)
3   c(3.33344625797791, 51.3620269560137)
4   c(4.36158333330571, 51.2919925240015)
5   c(4.11514955241717, 51.1308060725143)

我试过了:

st_as_sf(as.numeric(as.character(dat$geom_transect)))

我收到以下错误消息:

Error in UseMethod("st_as_sf") : 
  no applicable method for 'st_as_sf' applied to an object of class "c('double', 'numeric')"
In addition: Warning message:
In st_as_sf(as.numeric(as.character(dat$geom_transect))) :
  NAs introduced by coercion

我也试过了:

st_point(is.numeric(dat$geom_transect))

Error in st_point(is.numeric(dat$geom_transect)) : 
  is.numeric(x) is not TRUE

欢迎任何帮助,在此先感谢!

【问题讨论】:

  • 您不能使用as.numeric 将“c(2.59301435154815, 51.0850974058788)”转换为两个数字。少了一三步。您可以尝试使用scan(text=.,sep=",", what=""),或eval(parse(text=.),或strsplit(,然后使用sub() 删除“c(”和“)”,然后删除as.numeric。我敢肯定这个问题有很多重复,尽管我承认最有效的搜索方法还不是很清楚。进行搜索后,可能使用一些提示,您应该编辑您的问题以包含 dput(head(dat)) 并粘贴相关答案的链接。
  • 您还应该解释为什么该列看起来像这样。您是否是在错误的假设下做出的,即有一条简单的路径可以将其传递给以后的函数?回溯到有原始文本或原始数字的地方可能会容易得多。

标签: r dataframe geometry sf


【解决方案1】:

你确实让我走上了正轨,谢谢!我认为会有一种更简单的方法,我同意我应该以不同的方式存储几何表,但数据提取很长,我不想重新运行那部分代码。

这就是我最终检索 lon/lat 坐标的方法:

dat$geom_transect <- as.character(dat$geom_transect)
dat$lon <- as.numeric(sapply(strsplit(dat$geom_transect, '[(,)]'), "[[", 2))
dat$lat <- as.numeric(sapply(strsplit(dat$geom_transect, '[(,)]'), "[[", 3))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    • 2018-12-21
    • 2018-08-07
    • 2021-05-15
    • 2018-09-06
    • 1970-01-01
    • 2020-10-18
    相关资源
    最近更新 更多