[英]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.