最新国产好看的视频,伊人天堂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ù)框中同名的列。
    • allall.x、all.y:控制是否保留不匹配的行,類似 SQL 中的全連接、左連接、右連接。

all:邏輯值,all = L 是 all.x = L 和 all.y = L 的簡(jiǎn)寫,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)一致,只是想簡(jiǎn)單地“上下拼接”,用 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é)生成績(jī)表和學(xué)生信息表的合并)。

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

相關(guān)文章

最新評(píng)論

县级市| 沽源县| 醴陵市| 景宁| 遂昌县| 沙坪坝区| 克东县| 海原县| 定州市| 板桥市| 延长县| 凤阳县| 大方县| 云林县| 招远市| 灵武市| 吉林省| 稻城县| 外汇| 全南县| 惠东县| 安阳县| 平罗县| 瑞安市| 锡林郭勒盟| 涞源县| 斗六市| 苗栗县| 临沧市| 萨迦县| 西充县| 博乐市| 双桥区| 亳州市| 沂源县| 黎川县| 东乡| 屯门区| 久治县| 搜索| 弥勒县|