r - r 中的内部连接比任何一个数据框都提供更多的行
问题描述
我有两个包含大量数据的数据框,它们都有大约 1000 万行
当我在 r 中使用此查询时:
df<-inner_join(frame1,frame2,by=c("id1"="id2"))
这将返回具有 9000 万行的 df。我不明白这怎么可能,我怎么可能避免这种情况。
解决方案
举一个@Wietse de Vries 评论的例子,假设我们将这个表内部连接到自身:
frame1 <- data.frame(id = c(1,2,2,3,3,3), row = 1:6)
inner_join(frame1, frame1, by = c("id1" = "id1"))
# id1 row.x row.y
#1 1 1 1
#2 2 2 2
#3 2 2 3
#4 2 3 2
#5 2 3 3
#6 3 4 4
#7 3 4 5
#8 3 4 6
#9 3 5 4
#10 3 5 5
#11 3 5 6
#12 3 6 4
#13 3 6 5
#14 3 6 6
输出随着每个键值出现次数的平方而增加——即 id1 为 1 行,id2 为 4 行,id3 为 9 行等。如果之间存在大量相互匹配,则可以达到 9000 万行桌子。
为避免这种情况,请使键列表不同,每个键列表中只有一个:
frame1_distinct <- frame1 %>% distinct(id1, .keep_all = TRUE)
inner_join(frame1_distinct, frame1_distinct, by = c("id1" = "id1"))
id1 row.x row.y
1 1 1 1
2 2 2 2
3 3 4 4
推荐阅读
- javascript - 状态与身份验证一起使用
- c++ - 这个奇怪的函数参数是什么?
- sql - SQL如何查询平均运行时间
- postgresql - 如何在团队成员之间共享 postgresql 表?
- python - 有没有办法在程序开始时显示 PyQt5 QMessageBox 而无需与之交互?
- terraform - Terraform 模块抛出“错误:属性块不足”
- google-sheets - 在多个电子表格之间共享和同步列数据
- c# - 命令行调用后从脚本中捕获错误
- java - 开放式 MPI 中是否可以使用运行时结构?
- google-app-maker - 关于 Google 应用制作工具中的自动完成的问题