在R

时间:2018-04-10 13:59:04

标签: r data.table

我想合并两个数据表都有共同的列名。请参阅下面的我的脚本。但我需要使用代码获取列名,但不要手动输入如下所示。

基本上,我需要为每个数据表创建一个列名向量。

 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)

感谢任何帮助。

1 个答案:

答案 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)]会返回dt1dt2中找到的列的列表,并将它们提供给on=子句。这样做的想法是,您可以即时计算共享列名,而不必写出每个名称。

这取决于dt1中没有重复值,并希望加入dt1dt2中的所有共享列。

我使用了这个模拟数据:

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)
  )