首先,我想创建一个带有列名的空数据表,但它失败了:
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
具有两个相同数据表的参数。任何的想法?
最佳答案
至创建一个空的data.table
使用(假设所有列都是数字):
library(data.table)
data <- data.table(va=numeric(), vb=numeric(), vc=numeric())
data
这导致:
> data
Empty data.table (0 rows) of 3 cols: va,vb,vc
至对所有列进行自联接 使用(即使结果相同;-):
data2 <- data.table(va=c(-1,0,1), vb=c(-1,0,1), vc=c(-1,0,1))
data2
merge(data2, data2,by=names(data2))
必须指定
by
的原因参数是 merge
的记录语义:by:
A vector of shared column names in x and y to merge on. This defaults to the shared key columns between the two tables. If y has no key columns, this defaults to the key of x.
由于您没有设置任何键,因此合并数据表的“连接”列不清楚。
如果省略
by
,则没有隐含的“使用所有列”语义。参数(如上所述,采用共享键列)。至追加所有行 将 data.table 转换为您使用的另一个
rbind
("行绑定(bind)") 而不是 merge
:data3 <- rbind(data2, data2)
data3
结果是:
> data3
va vb vc
1: -1 -1 -1
2: 0 0 0
3: 1 1 1
4: -1 -1 -1
5: 0 0 0
6: 1 1 1
关于r - 如何使用列名创建一个空数据表,然后将数据表附加到它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37376398/