【发布时间】:2016-09-19 11:20:38
【问题描述】:
首先我想创建一个带有列名的空数据表,但它失败了:
data <- data.table(va, vb, vc)
> Error in data.table(va, vb, vc) : object 'va' not found
其次,我想将数据表附加到它,但它也失败了:
data2 <- data.table(va=c(-1,0,1), vb=c(-1,0,1), vc=c(-1,0,1))
data2
va vb vc
1: -1 -1 -1
2: 0 0 0
3: 1 1 1
merge(data2,data2)
> Error in merge.data.table(data2, data2) :
Can not match keys in x and y to automatically determine appropriate `by` parameter. Please set `by` value explicitly.
显然该函数无法识别具有两个相同数据表的by 参数。有什么想法吗?
【问题讨论】:
-
"object va" not found 是因为 R 假定它是一个变量名,并且您的工作区中没有名为
va的现有变量 -
创建一个空的 data.table 使用(假设所有列都是数字):
data=data.table(va=numeric(), vb=numeric(), vc=numeric()) -
在循环中动态增长事物(这听起来像是你正在做的事情)在 R 中是个坏主意。
-
这个问题已经过时了,
merge(data2,data2)在 data.table v1.11.x 中默认所有(共享)键就好了。我猜这在 v1.9.6 (2016) 中没有实现。 -
@tamarad R Inferno 的第 2 章(在此免费 burns-stat.com/pages/Tutor/R_inferno.pdf)是人们通常指出的,其中提到“碎片化内存”和缓慢作为副作用。这适用于向量、数组和表格。我认为一个例外是增加列表是可以的,如 cmets 中所述:stackoverflow.com/questions/14801035/…
标签: r merge data.table