【问题标题】:Left join Merge data.table [duplicate]左连接合并data.table [重复]
【发布时间】:2017-10-10 08:27:38
【问题描述】:

我想使用 data.table 库在 R 上使用 2 个 data.frames 进行左连接。我有什么:

library(data.table)
id<-c("a1","a2","a3","a4")
id2<-c("a2","a3","a1","a4")
y<-c(1,2,3,4)
z<-c(3,5,6,7)
k<-c(1,3,8,7)

df1<-data.table(id,y,z)

id<-c("a2","a3","a1","a4")
df2<-data.table(id,k,y)

我希望结果是一个新的 data.table 框架,这是 LEFT JOIN 的结果,这是:

result--> id,x,y,z

我以此为指导: https://rstudio-pubs-static.s3.amazonaws.com/52230_5ae0d25125b544caab32f75f0360e775.html

merge(df1,df2,by="id",all.x=TRUE)

但这让我回过神来:

   id y.x z x y.y
1: a1   1 3 3   3
2: a2   2 5 0   1
3: a3   3 6 2   2
4: a4   4 7 1   4

这个问题是 y 列重复了,我希望它只出现一次。

我尝试了 all=FALSE, all.x=T,... 但我没有达到我想要的效果。

我也尝试过其他解决方案,如:left join in data.table

setkey(df1,id)
setkey(df2,id)
df1[df2]

但又是这样,复制 y 列。

   id y z k i.y
1: a1 1 3 8   3
2: a2 2 5 1   1
3: a3 3 6 3   2
4: a4 4 7 7   4

我该怎么做?

【问题讨论】:

  • 你想要的输出是什么?
  • 你为什么感到惊讶?您在两个表中都有 y 列。 R 怎么知道你只想要其中一个?哪一个?

标签: r merge data.table


【解决方案1】:

您可以通过删除其中一张表中的 y 列来合并 df1df2。试试dplyr::left_join(df1, df2[, -c("y")], by = "id")merge(df1, df2[, -c("y")], by = "id")

【讨论】:

  • 这不是一个好的解决方案,因为我有超过 2000 个相等的列并且手动执行它很难!。还是谢谢
  • 如果表之间的列确实相同,那么这样的事情应该可以工作merge(df1, df2)(如here,@thank Hardik gupta)。另一种选择是使用colnames(df1)[(colnames(df1) %in% colnames(df2))] 设置一个包含所有重复列的向量,然后在merge 函数中使用该向量(在by 参数中或其中一个表的子集)。
猜你喜欢
  • 2015-12-29
  • 2016-04-08
  • 1970-01-01
  • 2015-08-02
  • 2018-10-18
  • 1970-01-01
  • 2011-12-22
相关资源
最近更新 更多