1. 程式人生 > >R語言學習-第二課-變數的基本操作

R語言學習-第二課-變數的基本操作

1.變數變換
        as.array(x),as.data.frame(x),as.numeric(x),as.logical(x),as.complex(x),as.character(x),...轉換變數型別;使用如下命令可得到全部列表,methods(as)
        factor():將一個向量轉化為一個因子

2.變數資訊
        is.na(x),is.null(x),is.array(x),is.data.frame(x),is.numeric(x),is.complex(x),is.character (x),...檢驗變數的型別;使用如下命令得到全部列表,methods(is)
        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,y相比較小者,組成新的向量
pmax(x,y,...):x,y相比較大者,組成新的向量
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字元操作
str_c(..., sep = "", collapse = NULL):轉化為字元後連線向量;seq=為分割界限(一個空格為預設);選擇collapse=可以分 割"collapse"結果
str_sub(string, start = 1L, end = -1L) :提取字元向量的子欄位;

同樣可以賦值,使用str_sub(string, start = 1L, end = -1L) <- value 替換子字串
str_split(x,split):在split的位置分割x,例如:
x<-str_split("An R matrix corresponds to the mathematical concept"," ");
length(x[1]);   #注意:物件被存放在列表x的第一項中,可以用x[1]提取
str_to_lower(x):轉化為lowercase
str_to_upper(x):轉化為uppercase

x%in%table:table中匹配x元素位置組成的向量,返回值為邏輯值

str_match(string, pattern):pattern匹配字元,並返回對應的字元string

str_extract: 從字串中提取匹配字元
str_extract(shopping_list, "\\d") # 提取數字 #提取匹配模式的第一個字串
str_extract(shopping_list, "[a-z]+") #提取字母

str_detect(string, pattern) 匹配字串的字元-- 檢測函式,用於檢測字串中是否存在某種匹配模式

# 檢查字串向量,是否以a為開頭 :str_detect(val, "^a")

nchar(x):字元的個數