R語(yǔ)言教程:數(shù)據(jù)結(jié)構(gòu)+導(dǎo)入數(shù)據(jù)!
2.1 數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)集通常是由數(shù)據(jù)構(gòu)成的一個(gè)矩形數(shù)組,行表示觀測(cè),列表示變量(但不同行業(yè)對(duì)行和列叫法不同,在R中用觀測(cè)和變量代表行和列)。
R可以處理的數(shù)據(jù)類型(模式)包括數(shù)值型、字符型、邏輯型(TRUE/FALSE)、復(fù)數(shù)型(虛數(shù))和原生型(字節(jié))。
R擁有許多用于存儲(chǔ)數(shù)據(jù)的對(duì)象類型,包括標(biāo)量、向量、矩陣、數(shù)組、數(shù)據(jù)框和列表。
1. 標(biāo)量
標(biāo)量是只含一個(gè)元素的向量,用于保存常量。例如例如 f<-3 、 g<-“US” 和 h<-TRUE。
2. 向量
向量是用于存儲(chǔ)數(shù)值型、字符型或邏輯型數(shù)據(jù)的一維數(shù)組。執(zhí)行組合功能的函數(shù)c()可用來(lái)創(chuàng)建向量。
a <- c(1, 2, 5, 3, 6, -2, 4) b <- c("one", "two", "three")c <- c(TRUE, TRUE, TRUE, FALSE, TRUE, FALSE)
注意,單個(gè)向量中的數(shù)據(jù)必須擁有相同的類型或模式(數(shù)值型、字符型或邏輯型)。
訪問(wèn)向量中的元素:在方括號(hào)中給定元素所處位置
a <- c("k", "j", "h", "a", "c", "m")a[3][1] "h"a[c(1, 3, 5)][1] "k" "h" "c"a[2:6] #冒號(hào)用于生成一個(gè)數(shù)值序列[1] "j" "h" "a" "c" "m"
3. 矩陣
矩陣是一個(gè)二維數(shù)組,只是每個(gè)元素都擁有相同的模式(數(shù)值型、字符型或邏輯型)。可通過(guò)函數(shù)matrix()創(chuàng)建矩陣。一般格式:
myymatrix <- matrix(vector, nrow=number_of_rows, ncol=number_of_columns, byrow=logical_value, dimnames=list(char_vector_rownames, char_vector_colnames))
vector包含了矩陣的元素
nrow和ncol用以指定行和列的維數(shù)
選項(xiàng)byrow則表明矩陣應(yīng)當(dāng)按行填充(byrow=TRUE)還是按列填充(byrow=FALSE),默認(rèn)情況下按列填充
dimnames包含了可選的、以字符型向量表示的行名和列名
創(chuàng)建一個(gè)5×4的矩陣:
y <- matrix(1:20, nrow=5, ncol=4) y [,1] [,2] [,3] [,4] [1,] 1 6 11 16 [2,] 2 7 12 17 [3,] 3 8 13 18 [4,] 4 9 14 19 [5,] 5 10 15 20
創(chuàng)建一個(gè)按行填充的2×2矩陣:
cells <- c(1,26,24,68)rnames <- c("R1", "R2")cnames <- c("C1", "C2")mymatrix <- matrix(cells, nrow=2, ncol=2, byrow=TRUE, dimnames=list(rnames, cnames)) mymatrix C1 C2 R1 1 26 R2 24 68
創(chuàng)建一個(gè)按列填充的2×2矩陣:
mymatrix <- matrix(cells, nrow=2, ncol=2, byrow=FALSE, dimnames=list(rnames, cnames))mymatrix C1 C2R1 1 24R2 26 68
矩陣下標(biāo)的使用:
x <- matrix(1:10, nrow=2) #創(chuàng)建了一個(gè)內(nèi)容為數(shù)字1到10的2×5矩陣x [,1] [,2] [,3] [,4] [,5] [1,] 1 3 5 7 9 [2,] 2 4 6 8 10
x[2,] #選擇第二行的元素[1] 2 4 6 8 10 x[,2] #選擇第二列的元素[1] 3 4 x[1,4] #選擇第1行的第4列的元素[1] 7x[1, c(4,5)] #選擇第1行的第4和5列的元素[1] 7 94. 數(shù)組
數(shù)組(array)與矩陣類似,但是維度可以大于2?赏ㄟ^(guò)array函數(shù)創(chuàng)建,格式如下:
myarray <- array(vector, dimensions, dimnames)
vector包含了數(shù)組中的數(shù)據(jù)
dimensions是一個(gè)數(shù)值型向量,給出各個(gè)維度下標(biāo)的最大值
dimnames是可選的、各維度名稱標(biāo)簽的列表
創(chuàng)建一個(gè)三維(2×3×4)數(shù)值型數(shù)組:
dim1 <- c("A1", "A2")dim2 <- c("B1", "B2", "B3")dim3 <- c("C1", "C2", "C3", "C4")z <- array(1:24, c(2, 3, 4), dimnames=list(dim1, dim2, dim3)) z , , C1 B1 B2 B3 A1 1 3 5 A2 2 4 6
, , C2 B1 B2 B3 A1 7 9 11 A2 8 10 12
, , C3 B1 B2 B3 A1 13 15 17 A2 14 16 18 , , C4 B1 B2 B3 A1 19 21 23 A2 20 22 245. 數(shù)據(jù)框
數(shù)據(jù)框是包含了不同模式(數(shù)值型、字符型等)的數(shù)據(jù)的集合?赏ㄟ^(guò)函數(shù)data.frame()創(chuàng)建:
mydata <- data.frame(col1, col2, col3, ...)
列向量col1、col2、col3等可為任何類型(如字符型、數(shù)值型或邏輯型)
每一列的名稱可由函數(shù)names指定
創(chuàng)建數(shù)據(jù)框:
patientID <- c(1, 2, 3, 4)age <- c(25, 34, 28, 52)diabetes <- c("Type1", "Type2", "Type1", "Type1")status <- c("Poor", "Improved", "Excellent", "Poor")patientdata <- data.frame(patientID, age, diabetes, status)patientdata patientID age diabetes status 1 1 25 Type1 Poor 2 2 34 Type2 Improved 3 3 28 Type1 Excellent 4 4 52 Type1 Poor
每一列數(shù)據(jù)的模式必須唯一。
選取數(shù)據(jù)框中的元素:
patientdata[1:2] patientID age1 1 252 2 34 3 3 284 4 52patientdata[c("diabetes", "status")] diabetes status1 Type1 Poor 2 Type2 Improved 3 Type1 Excellent 4 Type1 Poorpatientdata$age # $用來(lái)選取一個(gè)給定數(shù)據(jù)框中的某個(gè)特定變量[1] 25 34 28 52
可以聯(lián)合使用函數(shù)attach()和detach()或單獨(dú)使用函數(shù)with()來(lái)簡(jiǎn)化代碼,避免每個(gè)變量名前都鍵入一次patientdata$。
attach()、detach()和with()
例:mtcars數(shù)據(jù)框
summary(mtcars$mpg)plot(mtcars$mpg, mtcars$disp)plot(mtcars$mpg, mtcars$wt)
以上代碼可以寫(xiě)成:
attach(mtcars) #函數(shù)attach()可將數(shù)據(jù)框添加到R的搜索路徑中summary(mpg)plot(mpg, disp)plot(mpg, wt)detach(mtcars) #函數(shù)detach()將數(shù)據(jù)框從搜索路徑中移除
detach()并不會(huì)對(duì)數(shù)據(jù)框本身做任何處理,可以省略,但其實(shí)它應(yīng)當(dāng)被例行地放入代碼中。
當(dāng)名稱相同的對(duì)象不止一個(gè)時(shí),這種方法有局限性。
mpg <- c(25, 36, 47)attach(mtcars)The following object(s) are masked _by_ '.GlobalEnv': mpg
plot(mpg, wt)Error in xy.coords(x, y, xlabel, ylabel, log) : 'x' and 'y' lengths differ
mpg [1] 25 36 47
在數(shù)據(jù)框mtcars被綁定(attach)之前,環(huán)境中已經(jīng)有了一個(gè)名為mpg的對(duì)象,原始對(duì)象將取得優(yōu)先權(quán)。函數(shù)attach()和detach()最好在分析一個(gè)單獨(dú)的數(shù)據(jù)框,并且沒(méi)有多個(gè)同名對(duì)象時(shí)使用。
函數(shù)with()重寫(xiě)上例:
with(mtcars, { print(summary(mpg)) plot(mpg, disp) plot(mpg, wt)})
花括號(hào){}之間的語(yǔ)句都針對(duì)數(shù)據(jù)框mtcars執(zhí)行,如果僅有一條語(yǔ)句(例如summary(mpg)),那么花括號(hào){}可以省略。
因此,函數(shù)with()的局限性在于,賦值僅在此函數(shù)的括號(hào)內(nèi)生效。
with(mtcars, { stats <- summary(mpg) stats})stats錯(cuò)誤: 找不到對(duì)象'stats'
創(chuàng)建在with()結(jié)構(gòu)以外存在的對(duì)象,使用特殊賦值符<<-替代標(biāo)準(zhǔn)賦值符(<-)即可,它可將對(duì)象保存到with()之外的全局環(huán)境中。
發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
最新活動(dòng)更多
-
10月31日立即下載>> 【限時(shí)免費(fèi)下載】TE暖通空調(diào)系統(tǒng)高效可靠的組件解決方案
-
即日-11.13立即報(bào)名>>> 【在線會(huì)議】多物理場(chǎng)仿真助跑新能源汽車(chē)
-
11月28日立即報(bào)名>>> 2024工程師系列—工業(yè)電子技術(shù)在線會(huì)議
-
12月19日立即報(bào)名>> 【線下會(huì)議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
-
即日-12.26火熱報(bào)名中>> OFweek2024中國(guó)智造CIO在線峰會(huì)
-
即日-2025.8.1立即下載>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍(lán)皮書(shū)》
推薦專題
- 1 【一周車(chē)話】沒(méi)有方向盤(pán)和踏板的車(chē),你敢坐嗎?
- 2 特斯拉發(fā)布無(wú)人駕駛車(chē),還未迎來(lái)“Chatgpt時(shí)刻”
- 3 特斯拉股價(jià)大跌15%:Robotaxi離落地還差一個(gè)蘿卜快跑
- 4 馬斯克給的“驚喜”夠嗎?
- 5 大模型“新星”開(kāi)啟變現(xiàn)競(jìng)速
- 6 海信給AI電視打樣,12大AI智能體全面升級(jí)大屏體驗(yàn)
- 7 打完“價(jià)格戰(zhàn)”,大模型還要比什么?
- 8 馬斯克致敬“國(guó)產(chǎn)蘿卜”?
- 9 神經(jīng)網(wǎng)絡(luò),誰(shuí)是盈利最強(qiáng)企業(yè)?
- 10 比蘋(píng)果偉大100倍!真正改寫(xiě)人類歷史的智能產(chǎn)品降臨
- 高級(jí)軟件工程師 廣東省/深圳市
- 自動(dòng)化高級(jí)工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級(jí)銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專家 廣東省/江門(mén)市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市