R的基本操作
基礎入門
c–建立向量
> x<-c(1,2,3)
> x
[1] 1 2 3
seq–生成序列
#生成2-10之間的整數序列 > data<-seq(2,10);data [1] 2 3 4 5 6 7 8 9 10 #生成2-10之間,步長為2的整數序列 > data<-seq(2,10,by=2);data [1] 2 4 6 8 10 #生成2-10之間,步長為0.2的序列 > data<-seq(2,10,by=.2);data [1] 2.0 2.2 2.4 2.6 2.8 3.0 3.2 3.4 3.6 3.8 4.0 4.2 4.4 4.6 [15] 4.8 5.0 5.2 5.4 5.6 5.8 6.0 6.2 6.4 6.6 6.8 7.0 7.2 7.4 [29] 7.6 7.8 8.0 8.2 8.4 8.6 8.8 9.0 9.2 9.4 9.6 9.8 10.0 #生成1-10之間的整數序列 > data<-1:10;data [1] 1 2 3 4 5 6 7 8 9 10 #生成從2開始,步長為0.5的前4個序列 > data<-seq(length=4,from=2,by=0.5) > data [1] 2.0 2.5 3.0 3.5 #生成-5到5之間按平均間隔生成的所有100個序列 > data<-seq(-5,5,length=100);data [1] -5.00000000 -4.89898990 -4.79797980 -4.69696970 -4.59595960 -4.49494949 [7] -4.39393939 -4.29292929 -4.19191919 -4.09090909 -3.98989899 -3.88888889 [13] -3.78787879 -3.68686869 -3.58585859 -3.48484848 -3.38383838 -3.28282828 [19] -3.18181818 -3.08080808 -2.97979798 -2.87878788 -2.77777778 -2.67676768 [25] -2.57575758 -2.47474747 -2.37373737 -2.27272727 -2.17171717 -2.07070707 [31] -1.96969697 -1.86868687 -1.76767677 -1.66666667 -1.56565657 -1.46464646 [37] -1.36363636 -1.26262626 -1.16161616 -1.06060606 -0.95959596 -0.85858586 [43] -0.75757576 -0.65656566 -0.55555556 -0.45454545 -0.35353535 -0.25252525 [49] -0.15151515 -0.05050505 0.05050505 0.15151515 0.25252525 0.35353535 [55] 0.45454545 0.55555556 0.65656566 0.75757576 0.85858586 0.95959596 [61] 1.06060606 1.16161616 1.26262626 1.36363636 1.46464646 1.56565657 [67] 1.66666667 1.76767677 1.86868687 1.96969697 2.07070707 2.17171717 [73] 2.27272727 2.37373737 2.47474747 2.57575758 2.67676768 2.77777778 [79] 2.87878788 2.97979798 3.08080808 3.18181818 3.28282828 3.38383838 [85] 3.48484848 3.58585859 3.68686869 3.78787879 3.88888889 3.98989899 [91] 4.09090909 4.19191919 4.29292929 4.39393939 4.49494949 4.59595960 [97] 4.69696970 4.79797980 4.89898990 5.00000000
rep—根據已有序列生成新的序列
#直接賦值
> x<-c(1,2,3,4,5)
> data<-rep(x);data
[1] 1 2 3 4 5
#複製n次
> data<-rep(x,3);data
[1] 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
#根據對應元素複製
> data<-rep(x,c(1,2,3,4,5));data
[1] 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5
paste—資料拼接
#拼接資料 > data<-paste(1,2,3,"hello"," ",c(1,2,3));data [1] "1 2 3 hello 1" "1 2 3 hello 2" "1 2 3 hello 3" #指定符號拼接資料 > data<-paste("a","b",sep=",") > data [1] "a,b" #指定符號拼接資料(含資料序列) > data<-paste("x",1:10,sep="|");data [1] "x|1" "x|2" "x|3" "x|4" "x|5" "x|6" "x|7" "x|8" "x|9" "x|10"
[ ] —資料篩選
> x<-seq(-10,10,length=40); #獲取大於3的資料 > data<-x[x>3];data [1] 3.333333 3.846154 4.358974 4.871795 5.384615 5.897436 6.410256 [8] 6.923077 7.435897 7.948718 8.461538 8.974359 9.487179 10.000000 #獲取排序第1-5的資料 > data<-x[1:5];data [1] -10.000000 -9.487179 -8.974359 -8.461538 -7.948718 #獲取除了序號1-5的資料【排除】 > data<-x[-(1:5)];data [1] -7.4358974 -6.9230769 -6.4102564 -5.8974359 -5.3846154 -4.8717949 [7] -4.3589744 -3.8461538 -3.3333333 -2.8205128 -2.3076923 -1.7948718 [13] -1.2820513 -0.7692308 -0.2564103 0.2564103 0.7692308 1.2820513 [19] 1.7948718 2.3076923 2.8205128 3.3333333 3.8461538 4.3589744 [25] 4.8717949 5.3846154 5.8974359 6.4102564 6.9230769 7.4358974 [31] 7.9487179 8.4615385 8.9743590 9.4871795 10.0000000
summary—獲取物件基本資訊
可以用於方程係數的基本資訊和檢驗資訊
> x
[1] -10.0000000 -9.4871795 -8.9743590 -8.4615385 -7.9487179 -7.4358974
[7] -6.9230769 -6.4102564 -5.8974359 -5.3846154 -4.8717949 -4.3589744
[13] -3.8461538 -3.3333333 -2.8205128 -2.3076923 -1.7948718 -1.2820513
[19] -0.7692308 -0.2564103 0.2564103 0.7692308 1.2820513 1.7948718
[25] 2.3076923 2.8205128 3.3333333 3.8461538 4.3589744 4.8717949
[31] 5.3846154 5.8974359 6.4102564 6.9230769 7.4358974 7.9487179
[37] 8.4615385 8.9743590 9.4871795 10.0000000
#物件基本資訊,分別是-最小值 | 1/4數值 | 中位數 | 3/4數值 | 最大值
> summary(x)
Min. 1st Qu. Median Mean 3rd Qu. Max.
-10 -5 0 0 5 10
factor–定製因子
因子就是將物件的值分成不同的組(levels)。用函式factor()建立一個因子,levels按序排列(字母序或數值序)。
> data<-c("粉紅","墨綠","湖綠","冰藍","粉紅")
> data
[1] "粉紅" "墨綠" "湖綠" "冰藍" "粉紅"
#levels可以實現去重
> factor(data)
[1] 粉紅 墨綠 湖綠 冰藍 粉紅
Levels: 冰藍 粉紅 湖綠 墨綠
matrix–生成矩陣
seq(-1,13,length=24);x
[1] -1.0000000 -0.3913043 0.2173913 0.8260870 1.4347826 2.0434783 2.6521739
[8] 3.2608696 3.8695652 4.4782609 5.0869565 5.6956522 6.3043478 6.9130435
[15] 7.5217391 8.1304348 8.7391304 9.3478261 9.9565217 10.5652174 11.1739130
[22] 11.7826087 12.3913043 13.0000000
#取前3*2=6個數據,生成3行2列的矩陣
> data<-matrix(x,3,2)
> data
[,1] [,2]
[1,] -1.0000000 0.826087
[2,] -0.3913043 1.434783
[3,] 0.2173913 2.043478
t–矩陣轉換秩
#從原來的3行2列轉成2行3列
> a<-t(data);a
[,1] [,2] [,3]
[1,] -1.000000 -0.3913043 0.2173913
[2,] 0.826087 1.4347826 2.0434783
cbind rbind–將資料繫結成矩陣
> x1<-c(1,2,3,4)
> x2<-c(2,5,10,17)
#按行繫結,即第一行x11,x21,第二行x12,x22...
> data<-cbind(x1,x2);data
x1 x2
[1,] 1 2
[2,] 2 5
[3,] 3 10
[4,] 4 17
#按列繫結,即第一列x11,x21,第二列x12,x22
> data<-rbind(x1,x2);data
[,1] [,2] [,3] [,4]
x1 1 2 3 4
x2 2 5 10 17
data.frame-- 建立表格
建立資料幀(也稱為資料框)
資料幀會被當作各列具有不同模式和屬性的矩陣。
資料幀按照矩陣的方式顯示,選取的行或列也按照矩陣的方式來索引。
#建立1行3列的資料,併為表格的列名賦值
> x1<-data.frame(name="tom",age="23",gender="male");x1
name age gender
1 tom 23 male
#建立3行3列的資料,併為列名賦值
> x1<-data.frame(name=c("tom","rose","panda"),age=c("23","22","18"),gender=c("male","female","male"));x1
name age gender
1 tom 23 male
2 rose 22 female
3 panda 18 male
#根據列名獲取資料
> x1$name
[1] tom rose panda
Levels: panda rose tom
> x1$age
[1] 23 22 18
Levels: 18 22 23
> x1$gender
[1] male female male
Levels: female male
#覆蓋資料,資料長度必須與指定列的資料長度一致,過多過少都不行
> x1$name=c("白","熊","黎")
> x1
name age gender
1 白 23 male
2 熊 22 female
3 黎 18 male
attach–資料幀掛接,扁平化資料幀
當覺得使用’ home’)麻煩時,可以進行資料幀掛接,這樣可以直接引用資料幀內的元素,而無需’$’,前提是資料幀外沒有同名的變數(如name)。
掛接後若要對資料幀元素進行賦值操作,仍需用’$’,否則視為賦值給資料幀外的元素。
#掛幀前需確認所有列名都沒有被用過,否則報錯,該列掛載失敗,其他列可以掛載
> attach(x1)
> name
[1] "白" "熊" "黎"
> age
[1] 23 22 18
Levels: 18 22 23
> gender
[1] male female male
Levels: female male
#取消掛載(掛了多少次,無論是否全部失敗,都要取消一次才能清除)
> detach(x1)
attach()也可以掛接list資料
注意:當對屬性值賦值之後,需要呼叫detach( )解除安裝掛接,再attach( )重新掛接才能顯示最新值。
read.table–讀取檔案資訊
#讀取資料,讀取前需要改變工作目錄(檔案->改變工作目錄)
> data<-read.table("info.txt",header=TRUE);data
name age gender
1 tom 23 男
2 rose 26 女
3 jim 30 男
4 jary 28 男
#可以把物件當作dataframe使用
> data$name
[1] tom rose jim jary
Levels: jary jim rose tom
畫圖基礎
畫圖的主要函式是plot(),基本引數如下
1)type為一個字元的字串,用於給定繪圖的型別,可選的值如下:
“p”:繪點(預設值);
“l”:繪製線;
“b”:同時繪製點和線;
“c”:僅繪製引數"b"所示的線;
“o”:同時繪製點和線,且線穿過點;
“h”:繪製出點到橫座標軸的垂直線;
“s”:繪製出階梯圖(先橫後縱);
“S”:繪製出階梯圖(先縱後豎);
“n”:作空圖。
(2)main引數 字串,給出圖形的標題;
(3)sub引數 字串,給出圖形的子標題;
(4)xlab 和 ylab引數 字串,用於給出x軸和y軸的標籤。
(5)xlim 和 ylim引數 都是二維向量,分別表示x軸和y軸的取值範圍。
plot()
> a<-c(1,4,2,9)
> b<-c(2,5,7,1)
> plot(a,b)
> plot(a,b,xlab="單價",ylab="利潤",type="h",main="單價-利潤散點圖")
boxplot() 箱型圖
> data<-c(25, 45, 50, 54, 55, 61, 64, 68, 72, 75, 75,78, 79, 81, 83, 84, 84, 84, 85, 86, 86, 86,87, 89, 89, 89, 90, 91, 91, 92, 100)
> boxplot(data)
“盒式圖"或叫"盒須圖”"箱形圖"boxplot(也稱箱須圖(Box-whiskerPlot)須圖又稱為箱形圖,其繪製須使用常用的統計量,能提供有關資料位置和分散情況的關鍵資訊,尤其在比較不同的母體資料時更可表現其差異。
每條線表示的含義,其中應用到了分位值(數)的概念。
主要包含六個資料節點,將一組資料從大到小排列,分別計算出他的上邊緣,上四分位數Q3,中位數,下四分位數Q1,下邊緣,還有一個異常值。