最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

R語言中rbind() 與 merge() 的區(qū)別與應(yīng)用場(chǎng)景

 更新時(shí)間:2025年08月25日 09:13:17   作者:煙鎖池塘柳0  
R語言中rbind()與merge()區(qū)別:rbind按行拼接,要求列結(jié)構(gòu)一致;merge按鍵(如ID)合并,類似SQL JOIN,允許不同結(jié)構(gòu),前者用于縱向疊加數(shù)據(jù),后者用于根據(jù)鍵列關(guān)聯(lián)數(shù)據(jù),適用于不同場(chǎng)景的數(shù)據(jù)整合需求,感興趣的朋友跟隨小編一起看看吧

R語言中rbind()與merge()的區(qū)別詳解

在R語言中,對(duì)兩個(gè)數(shù)據(jù)框(data.frame)進(jìn)行合并操作的常用函數(shù)有 rbind()merge(),但它們的用途和邏輯完全不同。本文就來詳細(xì)介紹一下這兩個(gè)函數(shù)的區(qū)別與應(yīng)用場(chǎng)景。

1rbind()—— 按行拼接

1.1 基本功能

  • 作用:把兩個(gè)數(shù)據(jù)框按照“行”的維度進(jìn)行拼接(row bind),也就是增加數(shù)據(jù)的“條數(shù)”,但是每個(gè)數(shù)據(jù)的“屬性”不變化。
  • 要求:兩個(gè)數(shù)據(jù)框必須具有 相同的列名相同的列數(shù),否則會(huì)報(bào)錯(cuò)或強(qiáng)制補(bǔ) NA。
  • 常見用途:當(dāng)兩個(gè)數(shù)據(jù)框結(jié)構(gòu)相同,只是觀測(cè)值不同,需要縱向疊加時(shí)。

1.2 示例

df1 <- data.frame(id = 1:3, value = c("A", "B", "C"))
df2 <- data.frame(id = 4:5, value = c("D", "E"))
rbind(df1, df2)

結(jié)果:

  id value
1  1     A
2  2     B
3  3     C
4  4     D
5  5     E

?? df2 的數(shù)據(jù)被直接拼接在 df1 的下面。

2merge()—— 按鍵合并

2.1 基本功能

  • 作用:根據(jù)一個(gè)或多個(gè)鍵列(key),把兩個(gè)數(shù)據(jù)框進(jìn)行 數(shù)據(jù)庫式的合并,非常類似 SQL 的 JOIN,或者GIS中的表連接。
  • 參數(shù)
    • by:指定鍵列。如果不寫,默認(rèn)使用兩個(gè)數(shù)據(jù)框中同名的列。
    • all、all.x、all.y:控制是否保留不匹配的行,類似 SQL 中的全連接、左連接、右連接。

all:邏輯值,all = L 是 all.x = L 和 all.y = L 的簡寫,L 可以是 TRUE 或 FALSE。
all.x:邏輯值,默認(rèn)為 FALSE。如果為 TRUE, 顯示 x 中匹配的行,即便 y 中沒有對(duì)應(yīng)匹配的行,y 中沒有匹配的行用 NA 來表示。
all.y:邏輯值,默認(rèn)為 FALSE。如果為 TRUE, 顯示 y 中匹配的行,即便 x 中沒有對(duì)應(yīng)匹配的行,x 中沒有匹配的行用 NA 來表示。

2.2 示例

df1 <- data.frame(id = 1:3, score = c(90, 85, 88))
df2 <- data.frame(id = c(2, 3, 4), name = c("Tom", "Jerry", "Lucy"))
merge(df1, df2, by = "id", all = TRUE)

結(jié)果:

  id score  name
1  1    90  <NA>
2  2    85   Tom
3  3    88 Jerry
4  4  <NA>  Lucy

?? 可以看到,id 相同的行被合并到一起,不匹配的地方用 NA 填充。

3 詳細(xì)解釋 merge() 函數(shù)和 SQL 的 JOIN 功能的相似性

(此處參考:R 數(shù)據(jù)重塑 | 菜鳥教程 。)

merge() 設(shè)置SQL 等價(jià)保留哪些行
默認(rèn)(all = FALSEINNER JOIN僅鍵匹配成功的行
all.x = TRUELEFT JOIN左表全部 + 右表匹配,不匹配右側(cè)補(bǔ) NA
all.y = TRUERIGHT JOIN右表全部 + 左表匹配,不匹配左側(cè)補(bǔ) NA
all = TRUEall.x=TRUE & all.y=TRUEFULL OUTER JOIN兩表全部,任何一側(cè)不匹配的用對(duì)側(cè)列 NA 補(bǔ)齊

3.1 示例與結(jié)果對(duì)照

x <- data.frame(id = 1:3, score = c(90, 85, 88))
y <- data.frame(id = c(2, 3, 4), name = c("Tom", "Jerry", "Lucy"))
3.1.1 內(nèi)連接(默認(rèn))—— 只要公共部分
merge(x, y, by = "id")
  id score  name
1  2    85   Tom
2  3    88 Jerry
3.1.2 左連接 —— 保留 x 的所有行
merge(x, y, by = "id", all.x = TRUE)
  id score  name
1  1    90  <NA>   # y 中沒有 id=1,用 NA 補(bǔ)
2  2    85   Tom
3  3    88 Jerry
3.1.3 右連接 —— 保留 y 的所有行
merge(x, y, by = "id", all.y = TRUE)
  id score  name
1  2    85   Tom
2  3    88 Jerry
3  4  <NA>  Lucy   # x 中沒有 id=4,用 NA 補(bǔ)
3.1.4 全連接 —— 兩邊都不丟
merge(x, y, by = "id", all = TRUE)
# 同等寫法:merge(x, y, by = "id", all.x = TRUE, all.y = TRUE)
  id score  name
1  1    90  <NA>
2  2    85   Tom
3  3    88 Jerry
4  4  <NA>  Lucy

3.2 幾個(gè)實(shí)用細(xì)節(jié)(容易忽略)

  • 鍵列的指定
    • by = "id":兩表鍵列同名。
    • by.x = "key_in_x", by.y = "key_in_y":兩表鍵列不同名時(shí)這樣寫。
    • 可以是多個(gè)鍵by = c("id", "date")。
  • 重復(fù)鍵會(huì)產(chǎn)生“乘法效應(yīng)”
    • 如果兩邊同一個(gè)鍵各有多行,merge() 會(huì)做笛卡爾匹配(m×n 行)。這是預(yù)期行為,非 Bug。
    • 必要時(shí)先 unique() 去重或在鍵上匯總。
  • 排序
    • 默認(rèn) sort = TRUE,結(jié)果會(huì)按鍵列排序;
    • 要盡量保持原表順序(尤其左連接),用 sort = FALSE
merge(x, y, by = "id", all.x = TRUE, sort = FALSE)
  • 同名非鍵列的沖突
    • 兩表中鍵以外有同名列,merge() 會(huì)保留兩列,并自動(dòng)加后綴:
    • suffixes = c(".x", ".y")(可自定義)。
  • 缺失值匹配
    • 默認(rèn) NA 不參與匹配;可用 incomparables = NA 阻止某些值匹配(較少用)。

4rbind()vsmerge()核心區(qū)別

函數(shù)合并方式要求/特點(diǎn)適用場(chǎng)景
rbind()直接拼行(縱向疊加)兩個(gè)數(shù)據(jù)框必須有相同的列名和結(jié)構(gòu)數(shù)據(jù)框結(jié)構(gòu)完全相同,只是增加觀測(cè)值
merge()按鍵匹配合并(類似 SQL JOIN根據(jù)某些列進(jìn)行匹配,不要求列結(jié)構(gòu)相同兩個(gè)數(shù)據(jù)框包含不同的變量,需要根據(jù)鍵對(duì)齊

5 總結(jié)

  • 如果你的數(shù)據(jù)框結(jié)構(gòu)一致,只是想簡單地“上下拼接”,用 rbind()。
  • 如果你需要根據(jù)某些列進(jìn)行類似數(shù)據(jù)庫表的連接,merge()

掌握這兩個(gè)函數(shù)的區(qū)別,有助于在數(shù)據(jù)預(yù)處理階段更高效地完成任務(wù)。

?? 推薦用法選擇

  • rbind() 更適合批量讀取多個(gè)同結(jié)構(gòu)數(shù)據(jù)(比如多個(gè) Excel sheet)。
  • merge() 更適合數(shù)據(jù)關(guān)聯(lián)(比如學(xué)生成績表和學(xué)生信息表的合并)。

到此這篇關(guān)于R語言中rbind() 與 merge() 的區(qū)別詳解的文章就介紹到這了,更多相關(guān)R語言 rbind() 與 merge() 區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

石渠县| 宜春市| 台州市| 五华县| 汨罗市| 尉犁县| 东海县| 瑞丽市| 城市| 牡丹江市| 莲花县| 嫩江县| 广安市| 海城市| 巴中市| 霍林郭勒市| 绵阳市| 大石桥市| 台北市| 兴仁县| 巴里| 晋州市| 施甸县| 响水县| 新巴尔虎右旗| 昭通市| 昌邑市| 山东省| 石首市| 辽阳市| 延津县| 兴宁市| 高碑店市| 江门市| 林周县| 古交市| 涡阳县| 庆云县| 罗山县| 赤壁市| 崇左市|