一、R語言資料類型(變量)
1、标量(Scalar) character,integer,logical,double等
2、向量(Vector)
3、因子(Factor)
4、矩陣(Matrix)
5、數組(Array)
6、清單(List)
7、資料框(Data frame)
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CZ0ADNxEDMiRWZ4cDN5QGMjljYwIzMllDOhJWZ2MWYi9CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
x "hello world"
二、一些基本的常用函數
1)連接配接字元串 paste() 函數
a "hello"b "how are"b "you"paste(a,b,c) #輸出結果為 "hello how are you"paste(a,b,c,sep = "-") #這裡指定連接配接符為- ,輸出結果為 "hello-how are-you"paste(a,b,c,sep ="") #輸出結果為 "hellohow areyou"
2)計算字元串的字元數 nchar() 函數
result "A B C D")result #輸出結果為 7
3)toupper() 和 tolower() 函數的基本文法是
a " A B c d")a #輸出結果為 " A B C D"b " A B c d")b #輸出結果為 " a b c d"
4)截取字元串的一部分 substring() 函數
cut "hello world",cut #輸出結果為 "hello"
三、變量
a 1,b "one",c #邏輯變量d 1:a 1,a #輸出結果為 "1" "2" "3" "4" "one"如果其中一個元素是字元,則非字元值則被強制轉換為字元類型rep(1:4,each=2) #輸出結果為 1 1 2 2 3 3 4 4seq(from=22,to=50,by=3) #輸出結果為 22 25 28 31 34 37 40 43 46 49seq(22,50,3) #輸出結果為 22 25 28 31 34 37 40 43 46 49
四、向量的操作
1、索引截取b "one",b[1] #輸出結果為 "one"b[1:3] #截取連續的 輸出結果為 "one" "two" "three"b[c(1,3)] #輸出結果為 "one" "three"2、邏輯篩選a 1,b 3]b #輸出結果為 5 6 7letters #輸出結果為 "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"letters[1:5] #輸出結果為 "a" "b" "c" "d" "e"3、向量運算#可以添加,減去,相乘或相除兩個相同長度的向量,将結果作為向量輸出v1 1,v2 1,add.result add.result #輸出結果為 2 6 8 9 5 7sub.result sub.result #輸出結果為 0 0 0 1 1 -3multi.result multi.result #輸出結果為 1 9 16 20 6 10divi.result divi.result #輸出結果為 1.00 1.00 1.00 1.25 1.50 0.40#向量循環利用#如果我們對不等長的兩個向量應用算術運算,則較短向量的元素被循環以完成操作v1 2,v1 1,add.result add.result #輸出結果為 2 5 5 6 3 7
五、因子(Factor),因子的用處是給資料分組
diabetes=c("T1","T2","T3","T4")diabetes #輸出結果為 "T1" "T2" "T3" "T4"diabetes=factor(diabetes)diabetes #輸出結果為 T1 T2 T3 T4 Levels: T1 T2 T3 T4#有序因子status=factor(status,order=TRUE,levels=c("one","three","two"))status #輸出結果為 one two three one three Levels: one < three < two nlevels(status) #輸出結果為 3levels(status) #輸出結果為 "one" "three" "two"
六、矩陣(Matrix),函數matrix()用于建立一個矩陣,矩陣資料類型隻能是一種
y = matrix(1:12,nrow=3,ncol=4)y #輸出結果為 [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12y = matrix(1:12,nrow=3,ncol=4,byrow=TRUE) y #輸出結果為 [,1] [,2] [,3] [,4] [1,] 1 2 3 4 [2,] 5 6 7 8 [3,] 9 10 11 12
七、數組 數組和矩陣類似
z 1:z #輸出結果為 , , 1 [,1] [,2] [,3] [,4][1,] 1 4 7 10[2,] 2 5 8 11[3,] 3 6 9 12, , 2 [,1] [,2] [,3] [,4][1,] 13 16 19 22[2,] 14 17 20 23[3,] 15 18 21 24
八、資料框,重點
資料框與矩陣類似,也是二維的,與矩陣不同的是,資料框中各列的資料類型可以不同,但是長度必須相同
1、資料框的建立patientID 1,age 22,diabetes "T1",status = c("poor","excellent","improved","poor")status = factor(status,order=TRUE,levels=c("poor","improved","excellent"))patientData patientData#輸出結果patientID age diabetes status1 1 22 T1 poor2 2 33 T2 excellent3 3 44 T3 improved4 4 45 T4 poor 2、資料框常用篩選方法,以mtcars為列,mtcars是R中自帶的内置資料框mtcats# mpg cyl disp hp drat wt qsec vs am gear carbMazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2head(mtcars)tail(mtcars)colnames(mtcars)#輸出結果 "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb"rownames(mtcars)#輸出結果 [1] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" [4] "Hornet 4 Drive" "Hornet Sportabout" "Valiant" [7] "Duster 360" "Merc 240D" "Merc 230" [10] "Merc 280" "Merc 280C" "Merc 450SE" [13] "Merc 450SL" "Merc 450SLC" "Cadillac Fleetwood" [16] "Lincoln Continental" "Chrysler Imperial" "Fiat 128" [19] "Honda Civic" "Toyota Corolla" "Toyota Corona" [22] "Dodge Challenger" "AMC Javelin" "Camaro Z28" [25] "Pontiac Firebird" "Fiat X1-9" "Porsche 914-2" [28] "Lotus Europa" "Ford Pantera L" "Ferrari Dino" [31] "Maserati Bora" "Volvo 142E" nrow(mtcars) #輸出結果為 32ncol(mtcars) #輸出結果為 11row.names(mtcars) #[1] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" [4] "Hornet 4 Drive" "Hornet Sportabout" "Valiant" [7] "Duster 360" "Merc 240D" "Merc 230" [10] "Merc 280" "Merc 280C" "Merc 450SE" [13] "Merc 450SL" "Merc 450SLC" "Cadillac Fleetwood" [16] "Lincoln Continental" "Chrysler Imperial" "Fiat 128" [19] "Honda Civic" "Toyota Corolla" "Toyota Corona" [22] "Dodge Challenger" "AMC Javelin" "Camaro Z28" [25] "Pontiac Firebird" "Fiat X1-9" "Porsche 914-2" [28] "Lotus Europa" "Ford Pantera L" "Ferrari Dino" [31] "Maserati Bora" "Volvo 142E" dim(mtcars) #輸出結果為 32 11 #rbind 按行合并資料框#cbind 按列合并資料框 3、行索引提取mtcars[1:2,] #提取第1,2行mtcars[,1:2] #提取第1,2列不連續mtcars[c(2,4),c(3,6,9)] #提取第2,4行的第3,6,9列通過列名稱提取matcars[,c("mpg","hp")] mtcars $hp #利用$符來取一列資料,傳回的是一個向量mtcars[,c("mpg")] #傳回一列是一個向量,但是我們想要傳回資料框,通過加上一個drop=FALSE處理mtcars[,c("mpg"),drop=FALSE]4、篩選,産生邏輯向量進行篩選interestcol "hp",#interestcol #輸出結果為 FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE FALSEmtcars[, interestcol] #将interestcol中是TRUE的列篩選出來 mtcars $hp>100mtcars[mtcars$hp>100,] #将hp列大于100的行取出來mtcars$hp>100 & mtcars$cy1>6mtcars[mtcars $hp>100 & mtcars $cyl>6,] subset方法subset(mtcars,hp>100 & cyl>6)資料排序,order産生一個排序後的索引orderIDdex 1]) orderIDdex #輸出結果 15 16 24 7 17 31 14 23 22 29 12 13 11 6 5 10 25 30 1 2 4 32 21 3 9 8 27 26 19 28 18 20mtcars[orderIDdex,] #按第一列從小到大輸出mtcarsorderIDdex 1],decreasing=TRUE)mtcars[orderIDdex,] #按第一列從大到小輸出mtcars
九、list
a 1,b 1:c mylist mylistnames(mylist)mylist[1] #輸出結果為 1 4 5 6 8mylist[["a"]]