1.變量變換
#轉換變量類型;使用如下命令可得到全部列表,methods(as) as.array(x) as.data.frame(x) as.numeric(x) as.logical(x) as.complex(x) as.character(x) factor()#:將一個向量轉化為一個因子
2.變量信息
#檢驗變量的類型;使用如下命令得到全部列表,methods(is) is.na(x) is.null(x) is.array(x) is.data.frame(x) is.numeric(x) is.complex(x) is.character (x) length(x)#:x中元素的個數 dim(x)#:查看變量的維數;重新設置的維數,例如dim(x)=c(3,2) dimnames(x)#:重新設置對象的名稱 nrow(x)#:行的個數 ncol(x)#:列的個數 class(x)#:得到或設置x的類;class(x)<-c(3,2) unclass(x)#刪除x的類 attr(x,which)#:得到或設置x的屬性which attributes(obj)#:得到或設置obj的屬性列表 #:對數據框數據進行表格形式的編輯 fix edit
3.數據選取和操作
which.max(x) #:返回x中最大元素的指標 which.min(x) #:返回x中最小元素的指標 rev(x) #:翻轉x中所有的元素 sort(x) #:升序排列x中的元素;降序排列使用:rev(sort(x)) cut(x,breaks) #:將x分割成為幾段(或因子);breaks為段數或分割點向量 match(x,y) #:返回一個和x長度相同且和y中元素相等的向量不等則返回NA which(x==a) #:如果比較操作為真(TRUE),返回向量x的指針 choose(n,k) #:組合數的計算 na.omit(x) #:去除缺失值(NA)(去除相關行如果x為矩陣或數據框) na.fail(x) #:返回錯誤信息,如果x包含至少一個NA unique(x) #:如果x為向量或數據框,返回唯一值 table(x) #:返回一個由x不同值個數組成的表格(通常用於整數或因子),即頻數表 subset(x,...) #:根據條件(...選取x中元素,如x$V1<10);如果x為數據框,選項select使用負號給出保留 或去除的變量 subset(x, subset, select, drop = FALSE, ...) sample(x,size) #:不放回的隨即在向量x中抽取size個元素,選項replace=TRUE允許放回抽取 prop.table(x,margin=) #:根據margin使用分數表示表格,wumargin時,所有元素和為1
* R數據的創建與索引
** 向量的操作
*** 向量的創建
**** c(...)
為concatenate的縮寫;
常見的將一系列參數轉化為向量的函數,通過recursive=TRUE降序排列列表並組合所有的元素為向量
*** from:to產生一個序列
":"有較高的優先級;1:4+1得到"2,3,4,5"
*** seq() 產生一個向量序列
seq(from = 1, to = 1, by = ((to - from)/(length.out - 1)),length.out = NULL, along.with = NULL, ...)
其中length.out可簡寫為len。
*** rep() 重復一個對象
rep(x,times):x是要重復的對象(例如向量c(1,2,3)),times為對象中每個元素重復的次數(如times=c(9,7,3)就是將x向量的1重復9次,2重復7次,3重復3次)。
除了上述主要的用法之外,還有一種特殊的用法:rep(x,times)重復x times次;使用each=來重復x元素each次;rep(c(1,2,3),2)得到1 2 3 1 2 3;rep(c(1,2,3),each=2)得到1 1 2 2 3 3。
*** 利用向量的索引實現定義分段函數
利用改變部分元素值的技術與邏輯值下標結合,可以定義向量的分段函數,例如,要定義
可以用如下的語句去實現:
x = c(-2.3,4,-5,7); y = numeric(length(x)); y[x<0] = 1 - x[x<0]; y[x>0] = 1 - x[x>0]; y [1] 3.3 -3.0 6.0 -6.0
4.1.數組(包含矩陣、向量)創建
c(...)
常見的將一系列參數轉化為向量的函數,通過recursive=TRUE降序排列列表並組合所有的元素為向量
from:to產生一個序列
":"有較高的優先級;1:4+1得到"2,3,4,5"
seq() 產生一個向量序列
seq(from = 1, to = 1, by = ((to - from)/(length.out - 1)),length.out = NULL, along.with = NULL, ...)
其中length.out可簡寫為len。
rep() 重復一個對象
rep(x,times):x是要重復的對象(例如向量c(1,2,3)),times為對象中每個元素重復的次數(如times=c(9,7,3)就是將x向量的1重復9次,2重復7次,3重復3次)。
除了上述主要的用法之外,還有一種特殊的用法:rep(x,times)重復x times次;使用each=來重復x元素each次;rep(c(1,2,3),2)得到1 2 3 1 2 3;rep(c(1,2,3),each=2)得到1 1 2 2 3 3。
matrix(...)
創立矩陣 matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,dimnames = NULL)
array(x,dim=...)
產生由x組成的數組;使用類似dim=c(3,4,2)指定維數;如果x長度不夠,則x自動循環
data.frame(...)
創建數據框,變量可能被命名或未被命名
data.frame(v=1:4,ch=c("a","b","c","d"),n=10);
相對短的向量會被填充到最大向量長度。
注意數據框中各個屬性的元素個數必須相同
list(...)
創建一個由變量組成的列表,變量可能被命名;
list(a=c(1,2),b="hi",c=3i) factor(x,levels=) #把向量x編碼稱為因子 factor(x = character(), levels, labels = levels,exclude = NA, ordered = is.ordered(x)) gl() #產生因子變量 gl(n,k,lenth=n*k,labels=)
通過指定水平方式產生水平因子;k為水平的個數,n為重復的次數
rbind() cbind()
rbind(...)以行的形式組合矩陣,數據框,或其它
cbind(...)以列的方式組合,其他同rbind()
數據切割和分離
向量指標
x[n]:第n個元素
x[-n]:除了第n個元素的x
x[1:n]:前n個元素
x[-(1:n)]:第n+1至最后的元素
x[c(1,4,2)]:指定元素
x["name"]:名為"name"的元素
x[x>3]:所有大於3的元素
x[x>3 & x<5]:區間(3,5)的元素
x[x%in%c("a","and","the")]:給定組中的元素
列表指標
x[n]:列表顯示元素n
x[n]:列表的第n個元素
x["name"]:名為"name"的元素
x$name :同上
矩陣指標
x[i,j]:下表為(i,j)的元素
x[i,]:第i行
x[,j]:第j列
x[,c(1,3)]:第1和3列
x["name",]:名為"name"的行
x$name :同上
數據框指標
x["name"]:列明為"name"的列
x$name :同上
4.2.R數學函數
4.2.1.泛用函數apply:
描述:讓不同的函數作用數組array不同的邊。
用法:apply(X, MARGIN, FUN, ...)
參數描述:
X為一數組array,當然包括矩陣。
MARGIN:為一向量,它指定函數要作用的下標。例如對一個矩陣來說,1代表行,2代表列,而c(1,2)代表行和列。
FUN作用於數組array上的函數。此函數可以是自己編寫的。
注意:
當X時一個data.frame時,而不是array時,函數apply就會強制性的通過as.matrix或as.array將其轉化為maxtrix或array。
例子:
## Compute row and column sums for a matrix: x <- cbind(x1 = 3, x2 = c(4:1, 2:5)) col.sums <- apply(x, 2, sum) row.sums <- apply(x, 1, sum)
4.2.2.基本符號:
+ :加
- :減
* :乘
/ :除
^ :次方
%% 表示求余數
%/% 表示整除
4.2.3.三角函數與其他基本數學函數
sin,
cos,
tan,
asin,
atan,
atan2,
log,
log10,
exp,
max(x):
當x為一向量時,返回x中最大的元素。
當x為矩陣時,返回矩陣中所有元素的最大值。當要返回矩陣x每行或每列的最大值時,可以使用apply函數(apply(X, MARGIN, FUN, ...)),其中MARGIN表示要作用的方式,1代表行,2代表列,c(1,2)代表行和列;例如apply(data,MARGIN=1,max)
當x為data.frame時,1仍然代表行,2仍然代表列。
當x為數組array時,1仍然代表行,2仍然代表列,其它更高維數用相應的編號數字來表示,如3就可以代表array的頁。
其它詳細情況參考apply函數
min(x)#:返回x中最小的元素,同max rev(x)# 翻轉x中的所有元素 sort(x)# 升序排列x中的元素;降序排列使用rev(sort(x)),要得到排列的小標用order() choose(n,k)# 組合數計算 which()# 返回滿足條件的下表 sample(x,size)# 不放回的隨機在向量x中抽取size個元素選項,replace+TRUE允許放回抽樣 rank()#:計算向量的秩 range(x)#:返回c(min(x),max(x)) sum(x)#:x中各元素的加和 diff(x)#:向量x的差分 prod(x)#:x中元素的連乘積 mean(x)#:x的均值 median(x)#:x的中位數 quantile(x,probs=)#:滿足給定概率的樣本分位數(默認為0,0.25,0.75,1) weight.mean(x,w)#:加權平均,w即為weight,即權值。 rank(x)#:x中元素的秩 var(x)#:向量x的樣本方差;如果x是矩陣或數據框,協方差矩陣將被計算 cor(x)#:如果x是矩陣或數據框,相關系數矩陣將被計算 sd(x)#:x的標准差;sd(x)=sqrt(var(x)) var(x,y) or cov(x,y)#:x和y間的協方差;如果x,y為矩陣或數據框,返回x和y各列的協方差 cor(x,y)#:x和y的線性相關系數;或者相關矩陣,如果x和y為矩陣或者數據框 round(x,n)#:x的約數,精確到n位 log(x,base)#:計算x以base為基的對數,默認基為exp(1) scale(x)#:如果x是一個矩陣,則中心化和標准化數據;若只標准化數據,則使用選項center=FALSE,若只 中心化使用scale=FALSE(默認center=TRUE, scale=TRUE) pmin(x,y,...)#:x[i],y[i]相比較小者,組成新的向量 pmax(x,y,...)#:x[i],y[i]相比較大者,組成新的向量 Re(x)#:復數的實部 Im(x)#:復數的虛部 abs(x)#:絕對值 Arg(x)#:復數角度(in radians) Conj(x)#:共軛復數 fft(x)#:數組x的快速傅里葉變換 mvfft(x)#:矩陣x的每一列的傅里葉變換 factorial()#:計算n! cumsum()#:cumulative sums cumprod()#:cumulative products D(expression(exp(x^2)),"x")# :求導 integrate(function(x) x^2,0,1)#:積分
注意:大多數數學函數使用邏輯參數na.rm=FALSE來指定是否移除缺失值(NA)
4.3.R字符操作
paste(...)#:轉化為字符后連接向量;seq=為分割界限(一個空格為默認);選擇collapse=可以分 割"collapse"結果 substr(x,start,stop)#:提取字符向量的子字段;同樣可以賦值,使用substr(x,start,stop)<-value strsplit(x,split)#:在split的位置分割x,例如: x<-strsplit("An R matrix corresponds to the mathematical concept"," "); length(x[1])#; #注意:對象被存放在列表x的第一項中,可以用x[1]提取 grep(pattern,x)#:搜索x中滿足pattern條件;參見?regex gsub(pattern,replacement,x)#:替換滿足正則表達式的字段,sub()類似,但只替換第一個出現的字段 tolower(x)#:轉化為lowercase toupper(x)#:轉化為uppercase match(x,table)#:table中匹配x元素位置組成的向量 x%in%table#:table中匹配x元素位置組成的向量,返回值為邏輯值 pmatch(x,table)#:table中部分匹配x元素 nchar(x)#:字符的個數