我有一个字符向量x
,我想以高效的方式将其转换为一行数据表。命令data.table(x)
返回一个列数据表。现在,data.table(t(x))
可以完成任务,但我想知道是否有更快的方法。
我有一个字符向量x
,我想以高效的方式将其转换为一行数据表。命令data.table(x)
返回一个列数据表。现在,data.table(t(x))
可以完成任务,但我想知道是否有更快的方法。
x <- 1:5
setDT(as.list(x))[]
v1 <- 1:1e5
system.time(data.table(t(v1)))
# user system elapsed
# 12.95 0.01 12.97
system.time(setDT(as.list(v1)))
# user system elapsed
# 5.75 0.00 5.75
system.time(as.data.table(t(v1)))
# user system elapsed
# 6.35 0.00 6.34
如果以上练习是将一个向量与data.table
进行rbind
,我们不需要将向量转换为data.table
d1 <- data.table(V1= 1:3, V2= 4:6, V3=7:9)
rbindlist(list(d1, as.list(1:3)))
as.data.table(t(v1))
更快(并且类似于 setDT)。 - digEmAlldim(as.data.table(list_x)) # [1] 1 5 dim(setDT(list_x)) # [1] 1 5
根据对 nicola 的评论,我认为您不需要将其转换为 data.table
。只需将其作为 list
使用,然后将其放置在 rbindlist
中即可。 - akrun
data.table
前使用rbind
。每行转换成data.table
并在之后rbind
的做法更糟糕。 - nicolay
是我的字符向量列表。rbindlist(lapply(y,as.list))
似乎要快得多!现在我有点贪心。我仍然必须循环遍历y-是否有更快的方法?rbindlist
现在是我词汇表中的新功能-是否有其他函数可以处理此操作而无需首先将所有内容转换为列表? - NewNameStatsetDT
到这种情况。还请参见jangorecki的此问题 / eddi的相应答案。 - MichaelChirico