【问题标题】:Merging two dataframes with different keys of different data types in R在R中合并具有不同数据类型的不同键的两个数据帧
【发布时间】:2017-12-06 19:12:23
【问题描述】:

我有两个数据框

主人

P_ID      C_ID   D_ID ...
520686814 1222   1281
336892632 1232   8181 ...

str(master$P_ID) : integer64 [1:12000] 520686814 336892632 140101133 85433815 339389222

还有

维度

p_id      year  gender state
520686814 2017  1      A
336892632 2016  2      B

str(Dimension$p_id) : num [1:9915433] 520686814 336892632 636774575 248552775...

所以基本上我可以看到在两个数据帧中都有匹配 p_id 的记录。所以我使用

进行连接
joined <- merge(master, Dimension, by.x = "P_ID", by.y = "p_id")

令我惊讶的是,我没有得到任何记录。联接是否不适用于不同的数据类型,即使它们在子集时有效?

【问题讨论】:

  • integer64 是 R 原子类吗?根据您使用的软件包,它可能会将integer64 存储为character。然后应该清楚地看到为什么您的合并不起作用。您能否澄清一下您是如何生成integer64 数据的?

标签: r dataframe merge


【解决方案1】:

假设您没有对它们执行任何数学运算,您可以(有些人认为应该)将 ID 存储为字符串。据我了解,这是一种更安全的方法。此外,合并字符串比合并数字更快。

master$P_ID <- as.character(master$P_ID)
Dimension$p_id <- as.character(Dimension$p_id)
joined <- merge(master, Dimension, by.x = "P_ID", by.y = "p_id")

上面的代码应该可以完成。它没有回答为什么您的合并失败的问题,但确实为您提供了一种解决方法。

【讨论】:

  • 实际上,我的问题更集中在合并失败的原因上,我通过转换 master$P_ID
  • @hbabbar ... integer64 类型是什么,因为它不是基本的 R 原子类型?它是您定义的特殊类还是另一个包?如上所述,请发布使用的所有个库。
  • @Parfait 我也对此感到困惑。在您指出之后,我进行了检查,发现我使用 fread from data.table 来导入我的数据,并且它已将数据隐式读取为 integer64。当我从 read.csv 尝试返回时,它是数字的。这对我来说是一个新的观察。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-25
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 2021-09-05
  • 1970-01-01
相关资源
最近更新 更多