R語(yǔ)言數(shù)據(jù)重塑知識(shí)點(diǎn)總結(jié)
R 語(yǔ)言中的數(shù)據(jù)重塑是關(guān)于改變數(shù)據(jù)被組織成行和列的方式。 大多數(shù)時(shí)間 R 語(yǔ)言中的數(shù)據(jù)處理是通過(guò)將輸入數(shù)據(jù)作為數(shù)據(jù)幀來(lái)完成的。 很容易從數(shù)據(jù)幀的行和列中提取數(shù)據(jù),但是在某些情況下,我們需要的數(shù)據(jù)幀格式與我們接收數(shù)據(jù)幀的格式不同。 R 語(yǔ)言具有許多功能,在數(shù)據(jù)幀中拆分,合并和將行更改為列,反之亦然。
于數(shù)據(jù)幀中加入列和行
我們可以使用 cbind() 函數(shù)連接多個(gè)向量來(lái)創(chuàng)建數(shù)據(jù)幀。 此外,我們可以使用 rbind() 函數(shù)合并兩個(gè)數(shù)據(jù)幀。
# Create vector objects.
city <- c("Tampa","Seattle","Hartford","Denver")
state <- c("FL","WA","CT","CO")
zipcode <- c(33602,98104,06161,80294)
# Combine above three vectors into one data frame.
addresses <- cbind(city,state,zipcode)
# Print a header.
cat("# # # # The First data frame
")
# Print the data frame.
print(addresses)
# Create another data frame with similar columns
new.address <- data.frame(
city = c("Lowry","Charlotte"),
state = c("CO","FL"),
zipcode = c("80230","33949"),
stringsAsFactors = FALSE
)
# Print a header.
cat("# # # The Second data frame
")
# Print the data frame.
print(new.address)
# Combine rows form both the data frames.
all.addresses <- rbind(addresses,new.address)
# Print a header.
cat("# # # The combined data frame
")
# Print the result.
print(all.addresses)
當(dāng)我們執(zhí)行上面的代碼,它產(chǎn)生以下結(jié)果 -
# # # # The First data frame
city state zipcode
[1,] "Tampa" "FL" "33602"
[2,] "Seattle" "WA" "98104"
[3,] "Hartford" "CT" "6161"
[4,] "Denver" "CO" "80294"
# # # The Second data frame
city state zipcode
1 Lowry CO 80230
2 Charlotte FL 33949
# # # The combined data frame
city state zipcode
1 Tampa FL 33602
2 Seattle WA 98104
3 Hartford CT 6161
4 Denver CO 80294
5 Lowry CO 80230
6 Charlotte FL 33949
合并數(shù)據(jù)幀
我們可以使用 merge() 函數(shù)合并兩個(gè)數(shù)據(jù)幀。 數(shù)據(jù)幀必須具有相同的列名稱,在其上進(jìn)行合并。
在下面的例子中,我們考慮 library 名稱“MASS”中有關(guān) Pima Indian Women 的糖尿病的數(shù)據(jù)集。 我們基于血壓(“bp”)和體重指數(shù)(“bmi”)的值合并兩個(gè)數(shù)據(jù)集。 在選擇這兩列用于合并時(shí),其中這兩個(gè)變量的值在兩個(gè)數(shù)據(jù)集中匹配的記錄被組合在一起以形成單個(gè)數(shù)據(jù)幀。
library(MASS)
merged.Pima <- merge(x = Pima.te, y = Pima.tr,
by.x = c("bp", "bmi"),
by.y = c("bp", "bmi")
)
print(merged.Pima)
nrow(merged.Pima)
當(dāng)我們執(zhí)行上面的代碼,它產(chǎn)生以下結(jié)果 -
bp bmi npreg.x glu.x skin.x ped.x age.x type.x npreg.y glu.y skin.y ped.y 1 60 33.8 1 117 23 0.466 27 No 2 125 20 0.088 2 64 29.7 2 75 24 0.370 33 No 2 100 23 0.368 3 64 31.2 5 189 33 0.583 29 Yes 3 158 13 0.295 4 64 33.2 4 117 27 0.230 24 No 1 96 27 0.289 5 66 38.1 3 115 39 0.150 28 No 1 114 36 0.289 6 68 38.5 2 100 25 0.324 26 No 7 129 49 0.439 7 70 27.4 1 116 28 0.204 21 No 0 124 20 0.254 8 70 33.1 4 91 32 0.446 22 No 9 123 44 0.374 9 70 35.4 9 124 33 0.282 34 No 6 134 23 0.542 10 72 25.6 1 157 21 0.123 24 No 4 99 17 0.294 11 72 37.7 5 95 33 0.370 27 No 6 103 32 0.324 12 74 25.9 9 134 33 0.460 81 No 8 126 38 0.162 13 74 25.9 1 95 21 0.673 36 No 8 126 38 0.162 14 78 27.6 5 88 30 0.258 37 No 6 125 31 0.565 15 78 27.6 10 122 31 0.512 45 No 6 125 31 0.565 16 78 39.4 2 112 50 0.175 24 No 4 112 40 0.236 17 88 34.5 1 117 24 0.403 40 Yes 4 127 11 0.598 age.y type.y 1 31 No 2 21 No 3 24 No 4 21 No 5 21 No 6 43 Yes 7 36 Yes 8 40 No 9 29 Yes 10 28 No 11 55 No 12 39 No 13 39 No 14 49 Yes 15 49 Yes 16 38 No 17 28 No [1] 17
有時(shí),電子表格數(shù)據(jù)的格式很緊湊,可以給出每個(gè)主題的協(xié)變量,然后是該主題的所有觀測(cè)值。 R的建模功能需要在單個(gè)列中進(jìn)行觀察。 考慮以下來(lái)自重復(fù)MRI腦測(cè)量的數(shù)據(jù)樣本
Status Age V1 V2 V3 V4 P 23646 45190 50333 55166 56271 CC 26174 35535 38227 37911 41184 CC 27723 25691 25712 26144 26398 CC 27193 30949 29693 29754 30772 CC 24370 50542 51966 54341 54273 CC 28359 58591 58803 59435 61292 CC 25136 45801 45389 47197 47126
在每個(gè)主題上有兩個(gè)協(xié)變量和多達(dá)四個(gè)測(cè)量值。 數(shù)據(jù)從 Excel 導(dǎo)出為 mr.csv 文件。
我們可以使用堆棧來(lái)幫助操縱這些數(shù)據(jù)以給出單個(gè)響應(yīng)。
zz <- read.csv("mr.csv", strip.white = TRUE)
zzz <- cbind(zz[gl(nrow(zz), 1, 4*nrow(zz)), 1:2], stack(zz[, 3:6]))
結(jié)果為:
Status Age values ind X1 P 23646 45190 V1 X2 CC 26174 35535 V1 X3 CC 27723 25691 V1 X4 CC 27193 30949 V1 X5 CC 24370 50542 V1 X6 CC 28359 58591 V1 X7 CC 25136 45801 V1 X11 P 23646 50333 V2 ...
函數(shù)unstack的方向相反,可能對(duì)導(dǎo)出數(shù)據(jù)很有用。
另一種方法是使用函數(shù)重塑
> reshape(zz, idvar="id",timevar="var",
varying=list(c("V1","V2","V3","V4")),direction="long")
Status Age var V1 id
1.1 P 23646 1 45190 1
2.1 CC 26174 1 35535 2
3.1 CC 27723 1 25691 3
4.1 CC 27193 1 30949 4
5.1 CC 24370 1 50542 5
6.1 CC 28359 1 58591 6
7.1 CC 25136 1 45801 7
1.2 P 23646 2 50333 1
2.2 CC 26174 2 38227 2
...
重塑函數(shù)的語(yǔ)法比堆棧更復(fù)雜,但可以用于“l(fā)ong”表單中不止一列的數(shù)據(jù)。如果方向=“寬”,重塑還可以執(zhí)行相反的轉(zhuǎn)換。
到此這篇關(guān)于R語(yǔ)言數(shù)據(jù)重塑知識(shí)點(diǎn)總結(jié)的文章就介紹到這了,更多相關(guān)R語(yǔ)言數(shù)據(jù)重塑內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
R語(yǔ)言UpSet包實(shí)現(xiàn)集合可視化示例詳解
這篇文章主要為大家介紹了R語(yǔ)言UpSet包實(shí)現(xiàn)集合可視化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
R包c(diǎn)lusterProfiler如何安裝成功(新手必看!)
最近在我以為ClusterProfiler已經(jīng)安裝好的時(shí)候,又遇到了一些問(wèn)題,所以這篇文章主要給大家介紹了關(guān)于R包c(diǎn)lusterProfiler如何安裝成功的相關(guān)資料,需要的朋友可以參考下2023-02-02
詳解R語(yǔ)言MCMC:Metropolis-Hastings采樣用于回歸的貝葉斯估計(jì)
這篇文章主要介紹了R語(yǔ)言MCMC:Metropolis-Hastings采樣用于回歸的貝葉斯估計(jì),本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
R語(yǔ)言rhdf5讀寫(xiě)hdf5并展示文件組織結(jié)構(gòu)和索引數(shù)據(jù)
這篇文章主要為大家介紹了R語(yǔ)言rhdf5讀寫(xiě)hdf5并展示文件組織結(jié)構(gòu)和索引數(shù)據(jù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
R語(yǔ)言可視化存儲(chǔ)矢量圖實(shí)現(xiàn)方式
這篇文章主要為大家介紹了R語(yǔ)言存儲(chǔ)矢量圖的實(shí)現(xiàn)方式過(guò)程,有需要的朋友可以借鑒參考下,希望能夠有所你幫助,祝大家多多進(jìn)步,早日升職加薪2021-11-11
R語(yǔ)言實(shí)現(xiàn)對(duì)數(shù)據(jù)框按某一列分組求組內(nèi)平均值
這篇文章主要介紹了R語(yǔ)言實(shí)現(xiàn)對(duì)數(shù)據(jù)框按某一列分組求組內(nèi)平均值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03

