![](/img/trans.png)
[英]left_join function between x and y data frames returns more rows than the first data frame in r
[英]R inner join has more rows than in the first frame
使用内部连接,行数不能高于第一个数据帧中的行数。 但是为什么 R 会输出更多的行数呢?
我在第一个数据帧中测量了值,并想用来自第二个数据帧的唯一信息来补充这些数据帧。 例如:第一个数据帧有 368000 行,第二个数据帧有 19870 个唯一值。
Data<-tidyft::left_join(data_measurement_document, measurement points, by = "T1")
但这会返回 968497 个值! 那不可能。 我只有368000个测量值!
从我的角度来看,行数不得超过第一个数据框中的行数。
Data<-tidyft::inner_join(data_measurement_document, measurement points, by = "T1")
如何让 R 中的各种连接函数只生成第一个数据帧的最大行数?
笔记:
检查数据中是否存在变量“T1”的重复值。
如果您要加入的列的第二个表中存在重复值,则预期会出现这种行为。 left_join
将第一个表中的每个匹配项与第二个表中的每个匹配项连接起来。 考虑以下示例。 (我使用left_join
的dplyr
而不是tidyft
但我认为这些函数的行为相似。)
data1 <- data.frame(id=1:3,
value1=paste0('data1_value',1:3),
stringsAsFactors = FALSE)
data2 <- data.frame(id=c(1,1),
value2=paste0('data2_value',1:2),
stringsAsFactors = FALSE )
data3 <- left_join(data1,data2)
然后data1
有3行
ID | 价值1 |
---|---|
1 | 数据1_值1 |
2 | 数据1_值2 |
3 | 数据1_值3 |
data2
有 2 行,但id
值重复
ID | 价值2 |
---|---|
1 | 数据2_值1 |
1 | 数据2_值2 |
并且data3
,左连接的数据,有 4 行
ID | 价值1 | 价值2 |
---|---|---|
1 | 数据1_值1 | 数据2_值1 |
1 | 数据1_值1 | 数据2_值2 |
2 | 数据1_值2 | 不适用 |
3 | 数据1_值3 | 不适用 |
因为 data1 中的行 id=1 与 table2 中 id=1 的 2 行连接。
我在下面的代码中使用了您的示例数据和inner_join
但它不会产生比第一个表中更多的行
data1 <- structure(list(T1 = c(115, 160, 150, 115, 116, 150),
Value.1 = c("A", "B", "C", "D", "E", "F")),
class = "data.frame", row.names = c(NA, -6L))
data2 <- structure(list(T1 = c(115, 116, 150, 160),
Value.2 = c("X1", "X2", "X3", "X4")),
class = "data.frame", row.names = c(NA, -4L))
data3 <- inner_join(data1,data2,by="T1")
结果(data3)如下:
T1 | 价值.1 | 价值.2 |
---|---|---|
115 | 一个 | X1 |
160 | 乙 | X4 |
150 | C | X3 |
115 | D | X1 |
116 | 乙 | X2 |
150 | F | X3 |
这与左侧数据框的行数相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.