r - 为什么 sf 对象不能使用 R 中的所有 data.table 方法?

标签 r data.table sf

我正在用 R 学习 sf。因为我非常喜欢 data.table,所以我想我可以同时使用两者。但是,从 data.table 派生的 sf 对象似乎不能再使用 data.table 中的方法。下面是一个例子:

首先,我生成了一个非常简单的data.table 并将它变成了一个sf 对象。到目前为止一切顺利。

> dfr <- data.table(id = c("hwy1", "hwy2"), 
+                   cars_per_hour = c(78, 22),
+                   lat = c(1, 2),
+                   lon = c(3, 4)) 
> my_sf <- st_as_sf(dfr , coords = c("lon", "lat"))

然后我检查my_sf 的结构。它是一个sf对象,一个data.table和一个data.frame

> str(my_sf)
Classes ‘sf’, ‘data.table’ and 'data.frame':    2 obs. of  3 variables:
 $ id           : chr  "hwy1" "hwy2"
 $ cars_per_hour: num  78 22
 $ geometry     :sfc_POINT of length 2; first list element:  'XY' num  3 1
 - attr(*, "sf_column")= chr "geometry"
 - attr(*, "agr")= Factor w/ 3 levels "constant","aggregate",..: NA NA
  ..- attr(*, "names")= chr  "id" "cars_per_hour"

然后我尝试了一些任意函数unique,但它不起作用。实际上这个 my_sf 根本不能用作 data.table。

> my_sf[, unique(id)]
Error in unique(id) : object 'id' not found

请问有人知道是什么原因吗? sf 不能使用data.table 吗?

最佳答案

我的猜测是函数 st_as_sf 已经破坏了 .internal.selfref 属性,将 data.table 变回 data.frame,尽管类名已被保留。

> str(dfr)

#Classes ‘data.table’ and 'data.frame': 2 obs. of  4 variables:
#$ id           : chr  "hwy1" "hwy2"
#$ cars_per_hour: num  78 22
#$ lat          : num  1 2
#$ lon          : num  3 4
#- attr(*, ".internal.selfref")=<externalptr> 

setDT(my_sf) 可能足以将 data.frame 变回 data.table

关于r - 为什么 sf 对象不能使用 R 中的所有 data.table 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63701779/

相关文章:

r-将sf::st_within的输出转换为矢量

r - 在 r 中合并具有相似内容的列表项?

r - 如何合并一列中的行以匹配另一列中的非空行?

r - dplyr 改变/替换行子集上的几列

r - 按组选择随机连续行作为组长度的比例

r - 当数字列上的键和从文件中读取的数据时,键控 data.table 的 X[Y] 连接失败

r - 使用 R 中的 sf 将美学映射到 LINESTRING 几何图形

R:使用 ggplot、geom_sf 和 openstreetmap 绘制多面体时出现异常错误

r - 为什么在 Mac 和 Linux 上通过 `R -e ..` 的字符串命令需要额外的转义?

r - 在 R 中使用大量数据创建面板数据