r - R merge() rbinds 而不是合并
问题描述
我在 R 中遇到了merge()
我无法理解的行为。它似乎合并或 rbinds 数据帧,具体取决于列中是否有一个或多个唯一值。
a1 <- data.frame (A = c (1, 1))
a2 <- data.frame (A = c (1, 2))
# > merge (a1, a1)
# A
# 1 1
# 2 1
# 3 1
# 4 1
# > merge (a2, a2)
# A
# 1 1
# 2 2
后者是我在这两种情况下所期望和想要的结果。我还尝试了不止一列,以及字符而不是数字,结果是相同的:多个值导致合并,一个唯一值导致 rbinding。
解决方案
在第一种情况下,每行匹配两行,因此输出中有 2x2=4 行,在第二种情况下,每行匹配一行,因此输出中有 2 行。
要匹配行号,请使用以下命令:
merge(a1, a1, by = 0)
## Row.names A.x A.y
## 1 1 1 1
## 2 2 1 1
或匹配行号并仅返回左侧实例:
library(sqldf)
sqldf("select x.* from a1 x left join a1 y on x.rowid = y.rowid")
## A
## 1 1
## 2 1
或匹配行号并返回两个实例:
sqldf("select x.A A1, y.A A2 from a1 x left join a1 y on x.rowid = y.rowid")
## A1 A2
## 1 1 1
## 2 1 1
推荐阅读
- reactjs - React (WebPack) 抓取
- bash - Bash:从后台进程接收消息
- mongodb - 如何使用 mongodb 3.6 中的新 URL 从 golang 连接
- angular - 我们在 Angular 5/6 中有哪些选项可以避免轮询获取实时数据表单服务器
- ios - 带有 < > 的键盘类型,以便用户可以在多个文本字段之间导航
- git - git pull 后的 Laravel 致命错误
- xcode - clang:错误:安装 sumo-planetsumo 时链接器命令失败,退出代码为 1
- java - Android Jetty 致命异常
- php - 数组中的查找键在存在时找不到文本
- go - 如何在 Go/Golang 中使用 map[string]string 或自定义结构?