簡體   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