我想合并两个数据表都有共同的列名。请参阅下面的我的脚本。但我需要使用代码获取列名,但不要手动输入如下所示。
基本上,我需要为每个数据表创建一个列名向量。
setkeyv(Tab_1, c("State","County_ID","Year"))
setkeyv(Tab_2, c("State","County_ID","Year"))
sub_Merge <- merge(Tab_1, Tab_2, all.x = TRUE)
例如下面的内容,
setkeyv(Tab_1, as.vector(colnames(Tab_1))
setkeyv(Tab_2, as.vector(colnames(Tab_2))
sub_Merge <- merge(Tab_1, Tab_2, all.x = TRUE)
感谢任何帮助。
答案 0 :(得分:0)
使用data.table
,它非常简洁:
dt1[dt2, on = names(dt1)[names(dt1) %in% names(dt2)]]
data.table
使用dt[i,j,by]
结构。在i
槽中放置另一个data.table要求将其加入dt
位置的data.table。在连接中,您可以添加on=
语句来指定基于连接的列,如果两个data.tables中已存在的任何键控列不适合我们。在上面的代码中,names(dt1)[names(dt1) %in% names(dt2)]
会返回dt1
和dt2
中找到的列的列表,并将它们提供给on=
子句。这样做的想法是,您可以即时计算共享列名,而不必写出每个名称。
这取决于dt1
中没有重复值,并希望加入dt1
和dt2
中的所有共享列。
我使用了这个模拟数据:
dt1 <-
data.table(
a = LETTERS[1:10],
b = letters[1:10],
c = runif(10),
d = runif(10)
)
dt2 <-
data.table(
a = LETTERS[1:10],
b = letters[1:10],
e = runif(10),
f = runif(10)
)