r - 如何使用列名创建一个空数据表,然后将数据表附加到它?

标签 r merge data.table

首先,我想创建一个带有列名的空数据表,但它失败了:

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/

相关文章:

r - 在 R dplyr 中根据其他变量的唯一值对多个变量进行分组

r - 每两个连续变量调用一个函数

javascript - 在 JavaScript 中合并图像

sql - Redshift - 合并两列

r - 控制等高线图中的 z 标签

r - 重新排序行以具有重复序列的有效方法?

python - 如何准确合并两个具有完全不同列的不同 DataFrame

python - 基于数据框的两列创建网络并将其组件 ID 添加为新的聚合列

r - 按动态列名对数据表进行子集化

r - 合并 data.tables 保留最近的行或附加新行