- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要做的任务非常简单,使用 R 中的 sp
包,但我正在尝试学习 sf
因此我的问题。我正在尝试在 R 中创建点的形状。我有很多点,所以它必须高效。我已经在 sp
和 sf
中成功完成了此操作,但 sf 方法速度很慢。作为 sf
的新手,我有一种感觉,我没有以最有效的方式做到这一点。
我制作了 3 个不同的函数,它们做同样的事情:
1) 100% sp
f_rgdal <- function(dat) {
coordinates(dat) <- ~x+y
}
2) 100% sf
(可能很糟糕...)
f_sf <- function(dat) {
dat <- st_sfc(
lapply(
apply(dat[,c("x", "y")], 1, list), function(xx) st_point(xx[[1]])
)
)
}
3)两者的混合:
f_rgdal_sp <- function(dat) {
coordinates(dat) <- ~x+y
dat <- as(dat, "sf")
}
如果我对它们进行基准测试,您会发现函数 2 和 3 都比函数 1 慢得多:
set.seed(1234)
dd <- data.frame(x = runif(nb_pt, 0, 100),
y = runif(nb_pt, 0,50),
f1 = rnorm(nb_pt))
library(sp)
library(sf)
library(rbenchmark)
benchmark(f_rgdal(dd), f_sf(dd), f_rgdal_sp(dd), columns = c("test", "elapsed"))
test elapsed
1 f_rgdal(dd) 0.22
3 f_rgdal_sp(dd) 4.82
2 f_sf(dd) 4.08
他们是加速sf
的方法吗?最后,我想使用比 writeOGR
更快的 st_write
,因此留在 sp
中并不理想。
最佳答案
更“紧凑”的替代方案可以是:
library(sf)
set.seed(1234)
nb_pt <- 10000
dd <- data.frame(x = runif(nb_pt, 0, 100),
y = runif(nb_pt, 0,50),
f1 = rnorm(nb_pt))
sf <- sf::st_as_sf(dd, coords = c("x","y"))
sf
#> Simple feature collection with 10000 features and 1 field
#> geometry type: POINT
#> dimension: XY
#> bbox: xmin: 0.03418126 ymin: 0.02131674 xmax: 99.95938 ymax: 49.99873
#> epsg (SRID): NA
#> proj4string: NA
#> First 10 features:
#> f1 geometry
#> 1 -1.81689753 POINT (11.3703411305323 10....
#> 2 0.62716684 POINT (62.2299404814839 24....
#> 3 0.51809210 POINT (60.9274732880294 31....
#> 4 0.14092183 POINT (62.3379441676661 47....
#> 5 1.45727195 POINT (86.0915383556858 8.9...
#> 6 -0.49359652 POINT (64.0310605289415 14....
#> 7 -2.12224406 POINT (0.94957563560456 19....
#> 8 -0.13356660 POINT (23.2550506014377 3.8...
#> 9 -0.42760035 POINT (66.6083758231252 14....
#> 10 0.08779481 POINT (51.4251141343266 23....
它的优点是保留数据属性,并且对于较大的数据集似乎更快:
library(microbenchmark)
microbenchmark::microbenchmark(
st_cast = st_cast(st_sfc(st_multipoint(as.matrix(dd[,1:2]))), "POINT"),
st_asf = sf::st_as_sf(dd, coords = c("x","y"))
)
#> Unit: milliseconds
#> expr min lq mean median uq max neval
#> st_cast 208.6751 256.8995 294.2232 284.2213 316.1777 454.6856 100
#> st_asf 157.1974 176.6357 207.9863 200.1610 226.1047 323.5700 100
关于r - 使用 sf 快速创建 SpatialPointsDataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56812063/
我正在尝试将与 bat 位置 (SpatialPointsDataFrame) 相关的数据叠加到科罗拉多州 (SpatialPolygonsDataFrame) 上。两个对象的CRS不同: crs(c
我正在尝试将与 bat 位置 (SpatialPointsDataFrame) 相关的数据叠加到科罗拉多州 (SpatialPolygonsDataFrame) 上。两个对象的CRS不同: crs(c
我必须沿着一个曲折的特征来克里格值。因此,我必须将正常的笛卡尔坐标 (x,y) 转换为曲线坐标系 (s,n)。曲线坐标允许我进行克里格法,在克里格法之后,我可以将坐标反转为笛卡尔 x,y 以便表示原始
使用sp R 中的包。我想知道何时使用 SpatialPoints 以及何时使用 SpatialPointsDataframe。我觉得没有太大区别?! 唯一的区别是在 SpatialPointsDat
我有一个 SpatialPointsDataFrame,它有一个属性(为了方便起见,我们称之为 z)以及纬度/经度坐标。 我想将其写入 XYZ 文件(即具有三列的 ASCII 文件)。 最初我试过 w
我有一个 SpatialPointsDataFrame 加载 pst500),nrow(coord)) # check position of breaks breaks = c(1,which(li
我有一个使用以下命令绘制的 SpatialPolygonsDataFrame: spplot(milanoNILNew, "percPolVita",at = c(0,0.0696,0.08979,0
我需要将 R data.frame 对象转换为 SpatialPointsDataFrame 对象,以便对数据运行空间统计函数。但是,出于某种原因,将 data.frame 对象转换为 Spatial
我正在尝试使用 sp 完成的任务非常简单。 R 中的包,但我正在努力学习 sf因此我的问题。我试图在 R 中创建一个点的形状。我有很多点,所以它必须是有效的。我在 sp 中都成功做到了和 sf但是 s
我想要做的任务非常简单,使用 R 中的 sp 包,但我正在尝试学习 sf 因此我的问题。我正在尝试在 R 中创建点的形状。我有很多点,所以它必须高效。我已经在 sp 和 sf 中成功完成了此操作,但
我正在致力于运行 RandomForest。我已经导入了代表已使用和未使用站点的点数据,并从栅格 GIS 图层创建了一个栅格堆栈。我创建了一个 SpatialPointDataFrame,其中包含我所
我正在使用 HURDAT 数据集绘制飓风轨迹。 我目前在 R 中生成了一个 SpatialPointsDataFrame 对象,它在 2004 年看起来像这样。 > str(cluster.2
我一直在关注 this workflow将坐标从东/北转换为 R 中的纬度/经度。直到今天它一直工作正常。这是一个可重现的示例: require(rgdal) # create test coordi
我在 R 中有一个 SpatialPointsDataFrame,如下所示: coordinates id order hole piece group box_id
我使用 R 使用 ggplot2 形式的大圆圈在世界地图上投影一些数据流。 我还想在我的 map 上投影城市区域: http://www.naturalearthdata.com/downloads/
我想使用 ggmap 创建 map 。我想显示一些点的位置,从带有 UTM 坐标的数据框开始。但是,我总是以错误消息结尾:“错误:ggplot2 不知道如何处理 SpatialPointsDataFr
我正在尝试将 1000x1000 米正方形的 SpatialPointsDataFrame(网格)与 SpatialPolygonsDataFrame(信息)结合起来,以聚合每个网格正方形内点的所有信
我是一名优秀的程序员,十分优秀!