繁体   English   中英

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 中具有唯一值,不会出现重复值。
  • data_measurement_document:这里T1 的值不是唯一的
  • 结果中的行数不得多于数据集中的行数:data_measurement_document。

示例数据集

预期结果

检查数据中是否存在变量“T1”的重复值。

如果您要加入的列的第二个表中存在重复值,则预期会出现这种行为。 left_join将第一个表中的每个匹配项与第二个表中的每个匹配项连接起来。 考虑以下示例。 (我使用left_joindplyr而不是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM