【问题标题】:R data.table merge produces inconsistent results (or I am missing something) [closed]R data.table 合并产生不一致的结果(或者我遗漏了一些东西)[关闭]
【发布时间】:2021-11-01 09:23:31
【问题描述】:
a <- statuses[ID %between% c(59098, 59102), -c('Date')]
b <- restrictions[ID %between% c(59098, 59102), -c('Class', 'Date')]
c <- merge(a, b, by=c('Period', 'ID', 'MedID'), all.x=TRUE, allow.cartesian = TRUE)

d <- merge(statuses[ID %between% c(59098, 59102), -c('Date')], 
restrictions[ID %between% c(59098, 59102), -c('Class', 'Date')], 
by=c('Period', 'ID', 'MedID'), all.X=TRUE, allow.cartesian = TRUE)

a 有 4 行,b 有 5 行。c 有 7 行(正确),但 d 只有 5 行。

鉴于 c 和 d 基本上是在做相同的合并,它们的行数不应该相同吗?

【问题讨论】:

  • 您将需要提供显示问题的可重现数据。否则我们都在猜测。见stackoverflow.com/questions/5963269/…
  • 另外,你有一个错字 - all.X=TRUE 而不是 all.x=TRUE
  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: r merge data.table


【解决方案1】:

all.X=TRUE 是错误的,所以它没有从那一边拿走所有东西 改成

d <- merge(statuses[ID %between% c(59098, 59102), -c('Date')], 
restrictions[ID %between% c(59098, 59102), -c('Class', 'Date')], 
by=c('Period', 'ID', 'MedID'), all.x=TRUE, allow.cartesian = TRUE

解释为什么 d 与 B 有相同的行。

【讨论】:

  • 谢谢!我在这上面花了一个小时——可能是时候检查一下我的视力了 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-12
  • 1970-01-01
  • 2011-05-14
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 1970-01-01
相关资源
最近更新 更多