为什么sf对象不能使用R中的所有data.table方法?
我正在R学习sf。因为我非常喜欢data.table,我想我可以两者都用。然而,从data.table派生的sf对象似乎不能再使用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)
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>