R語(yǔ)言數(shù)據(jù)框的合并實(shí)現(xiàn)示例
有時(shí)數(shù)據(jù)集來(lái)自多個(gè)地方,我們需要將兩個(gè)或多個(gè)數(shù)據(jù)集合并成一個(gè)數(shù)據(jù)集。合并數(shù)據(jù)框的操作包括縱向合并、橫向合并和按照某個(gè)共有變量合并。
1.縱向合并:rbind( )
要縱向合并兩個(gè)數(shù)據(jù)框,可以使用 rbind( )
函數(shù)。被合并的兩個(gè)數(shù)據(jù)框必須擁有相同的變量,這種合并通常用于向數(shù)據(jù)框中添加觀測(cè)。例如:
data1 <- data.frame(id = 1:5, sex = c("female", "male", "male", "female", "male"), age = c(32, 46, 25, 42, 29)) data1
data2 <- data.frame(id = 6:10, sex = c("male", "female", "male", "male", "female"), age = c(52, 36, 28, 34, 26)) data2
rbind(data1, data2)
2. 橫向合并:cbind ( )
要橫向合并兩個(gè)數(shù)據(jù)框,可以使用 cbind( )
函數(shù)。用于合并的兩個(gè)數(shù)據(jù)框必須擁有相同的行數(shù),而且要以相同的順序排列。這種合并通常用于向數(shù)據(jù)框中添加變量。例如:
data3 <- data.frame(days = c(28, 57, 15, 7, 19), outcome = c("discharge", "dead", "discharge", "transfer", "discharge")) data3 cbind(data1, data3)
3. 按照某個(gè)共有變量合并:merge( )
有時(shí)我們有多個(gè)相關(guān)的數(shù)據(jù)集,這些數(shù)據(jù)集有一個(gè)或多個(gè)共有變量,我們想把它們按照共有變量合并成一個(gè)大的數(shù)據(jù)集。函數(shù) merge( ) 可以實(shí)現(xiàn)這個(gè)功能,例如:
data4 <- data.frame(id = c(2, 1, 3, 5, 4), outcome = c("discharge", "dead", "discharge", "transfer", "discharge")) data4 mydata <- merge(data1, data4, by = "id") mydata
full_join( )
dplyr 包中的 full_join( ) 函數(shù)也能實(shí)現(xiàn)上述功能上面的命令等價(jià)于:
options(warn=-1) # 清爽顯示 library(dplyr) mydata <- full_join(data1, data4, by = "id") mydata
dplyr 包提供了多種用于合并數(shù)據(jù)框的函數(shù),例如 bind_rows( )、bind_cols( )、left_join( )、right_join( ) 等,你可以查看這些函數(shù)的幫助文檔了解它們的用法。
4. 數(shù)據(jù)框的長(zhǎng)寬格式的轉(zhuǎn)換
基本包里的函數(shù) reshape( )
可以對(duì)數(shù)據(jù)進(jìn)行長(zhǎng)寬格式之間的轉(zhuǎn)換。
下面以 datasets 包里的數(shù)據(jù)集 Indometh 為例進(jìn)行說明。該數(shù)據(jù)集是關(guān)于藥物吲哚美辛(indometacin)的藥物代謝動(dòng)力學(xué)數(shù)據(jù),一共有 6 名試驗(yàn)對(duì)象,每名試驗(yàn)對(duì)象在連續(xù)的 8 小時(shí)內(nèi)定時(shí)測(cè)定了血液中的藥物濃度,共有 11 次的測(cè)定值。該資料是長(zhǎng)格式,下面將其轉(zhuǎn)換為寬格式。
data(Indometh) head(Indometh,12) # 這里增加一行,預(yù)覽數(shù)據(jù)前 12 行,方便對(duì)比
wide <- reshape(Indometh, v.names = "conc", idvar = "Subject", timevar = "time", direction = "wide") wide
Indometh
:這是一個(gè)數(shù)據(jù)框或數(shù)據(jù)集,表示要進(jìn)行重塑操作的原始數(shù)據(jù)。v.names
:這是一個(gè)字符串,表示要重塑的值變量的名稱。在這種情況下,"conc"
表示原始數(shù)據(jù)中的濃度變量。idvar
:這是一個(gè)字符串或向量,表示標(biāo)識(shí)變量的名稱或變量列表。在這種情況下,"Subject"
表示原始數(shù)據(jù)中的主體標(biāo)識(shí)變量。timevar
:這是一個(gè)字符串,表示時(shí)間變量的名稱。在這種情況下,"time"
表示原始數(shù)據(jù)中的時(shí)間變量。direction
:這是一個(gè)字符串,表示重塑的方向。在這種情況下,"wide"
表示要將數(shù)據(jù)從長(zhǎng)格式重塑為寬格式。
我們還可以將寬格式數(shù)據(jù) wide 重新轉(zhuǎn)換為長(zhǎng)格式:
long <- reshape(wide, idvar = "Subject", varying = list(2:12), v.names = "conc", direction = "long") head(long, 12)
函數(shù) reshape( ) 功能強(qiáng)大,但里面的參數(shù)很多,使用起來(lái)略顯不便。
tidyr
包以一種比較簡(jiǎn)潔統(tǒng)一的格式實(shí)現(xiàn)數(shù)據(jù)長(zhǎng)寬格式的轉(zhuǎn)換,其中,函數(shù) pivot_wider( )
用于把長(zhǎng)格式數(shù)據(jù)轉(zhuǎn)換為寬格式,而函數(shù) pivot_longer( )
用于把寬格式數(shù)據(jù)轉(zhuǎn)換為長(zhǎng)格式。上面的結(jié)果也可以用下述命令得到:
library(tidyr) wide <- pivot_wider(as.data.frame(Indometh), names_from = time, values_from = conc) wide
注意在上面的函數(shù) pivot_wider( ) 中,我們用函數(shù) as.data.frame( ) 將數(shù)據(jù) Indometh 轉(zhuǎn)換成了數(shù)據(jù)框,這是因?yàn)槠淠J(rèn)類型不是數(shù)據(jù)框。數(shù)據(jù)框 wide 也能重新轉(zhuǎn)換為長(zhǎng)格式:
long <- pivot_longer(wide, -Subject, names_to = "time", values_to = "conc") long
一個(gè)“整潔”的數(shù)據(jù)集(tidy data)應(yīng)該滿足:每一行代表一個(gè)觀測(cè),每一列代表一個(gè)變量。在對(duì)醫(yī)學(xué)數(shù)據(jù)進(jìn)行分析之前,通常情況下應(yīng)先把數(shù)據(jù)集轉(zhuǎn)換為長(zhǎng)格式,因?yàn)?R 中的大多數(shù)函數(shù)都支持這種格式的數(shù)據(jù)。
tidyr 包中的 gather()
和 spread()
同樣可以用于長(zhǎng)型、寬型數(shù)據(jù)類型轉(zhuǎn)換,詳見 Cookbook for R。
到此這篇關(guān)于R語(yǔ)言數(shù)據(jù)框的合并實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)R語(yǔ)言數(shù)據(jù)框合并內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
R語(yǔ)言繪圖數(shù)據(jù)可視化pie?chart餅圖
這篇文章主要介紹了R語(yǔ)言繪圖數(shù)據(jù)可視化pie?chart餅圖,教大家如何用R語(yǔ)言來(lái)畫大餅,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02R語(yǔ)言數(shù)據(jù)可視化包ggplot2畫圖之散點(diǎn)圖的基本畫法
散點(diǎn)圖主要用于描述兩個(gè)連續(xù)變量之間的關(guān)系,通過散點(diǎn)圖發(fā)現(xiàn)變量之間的相關(guān)性強(qiáng)度、是否存在線性關(guān)系等,下面這篇文章主要給大家介紹了關(guān)于R語(yǔ)言數(shù)據(jù)可視化包ggplot2畫圖之散點(diǎn)圖的基本畫法,需要的朋友可以參考下2022-11-11R語(yǔ)言中向量和矩陣簡(jiǎn)單運(yùn)算的實(shí)現(xiàn)
這篇文章主要介紹了R語(yǔ)言中向量和矩陣簡(jiǎn)單運(yùn)算的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03R語(yǔ)言實(shí)現(xiàn)地理加權(quán)回歸(GWR)
這篇文章主要為大家介紹了R語(yǔ)言實(shí)現(xiàn)地理加權(quán)回歸(GWR)操作流程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10