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

为什么sf对象不能使用R中的所有data.table方法?,r,data.table,sf,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)

我正在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"))
然后我尝试了一些任意函数
unique
,但它不起作用。实际上,这
my_uSF
根本不能作为data.table工作

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

有人知道原因吗?是否不能使用
数据.table
作为
sf

我猜函数
st\u因为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> 
str(dfr) #类“data.table”和“data.frame”:2个obs。共有4个变量: #$id:chr“hwy1”和“hwy2” #$cars_/小时:数量78 22 #$lat:num 1 2 #$lon:num 3 4 #-属性(*,“.internal.selfref”)=
setDT(my_sf)
可能足以将data.frame转换为
data.table

注意
dfr[,unique(id)]
按预期工作。您能否提供有关功能的更多详细信息?它来自哪个软件包?相关阅读:,以及其中的链接。@DJJ它来自软件包
sf
。它用于空间分析。如果我只是简单地将其转换回data.table,我就不能再将其用作sf了……好吧,那么我建议看看@Henrik发布的链接。据我所知,目前您无法同时保留这两个功能。因此,这将取决于您接下来要对数据做什么。请记住,您仍然可以将大部分操作作为data.frame来执行。这是事实。它仍然与
tidyverse
兼容。
> 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>