【问题标题】:How to join in a new column without a primary key?如何在没有主键的情况下加入新列?
【发布时间】:2016-03-28 18:17:01
【问题描述】:

我的 dplyr 加入技能有点生疏,但我正在尝试加入两个如下所示的数据集:

L = c("a","a","a","a")
M = c("b","b","b","b")
N = c("c","c","c","c")
O = c("d","e","d","e")
P = c(1521,02915,12451,12)
DF1 <- data.frame(L,M,N,O,P)    

L = c("a","a","a","a")
M = c("b","b","b","b")
N = c("c","c","c","c")
O = c("d","e","f","d")
Q = c(11,8805,1231,9012)
DF2 <- data.frame(L,M,N,O,Q)

有什么好的方法可以加入这些以便 P 和 Q 与相同的 LMNO 列在一起?我不确定是否有办法生成主键以加入 dplyr。

我认为这是不合法的操作:

DF3 <- left_join(DF1,DF2)

因为我从结果连接中丢失了 DF2 中的 O 列。我觉得我在这里遗漏了一些非常简单的东西......

【问题讨论】:

  • 为什么不试试merge(DF1,DF2)??
  • 如果你想保留所有行使用full_join而不是left_join。
  • @DatamineR 可能的原因:merge 可能会更慢并且可能会影响行顺序。
  • 所以merge(DF1,DF2, all = TRUE) 不是你想要的?
  • full_join 和 merge(x, y, all = TRUE) 做的任务一样吗?

标签: r dplyr


【解决方案1】:

如果您想要基于 LMNO 列的唯一记录,试试这个,

Select DF1.L, DF1.M, DF1.N , DF1.O , DF1.P , DF2.Q 
FROM DF1 JOIN DF2 
ON DF1.L = DF2.L 
AND DF1.M = DF2.M
AND DF1.N = DF2.N
AND DF1.0 = DF2.O

【讨论】:

  • 不要让你的泡沫破灭,但我不认为 OP 要求提供 SQL 代码
  • 对不起,我以为这个问题很简单,所以我给出了一个简单的答案。
猜你喜欢
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多