標籤:

plyr包

plyr是一個解決共同問題的工具;將一個大的數據結構分為若干個均等的小數據集,每個數據集使用同樣的函數處理,組合併返回所有小數據集的結果。

nn

R的基礎包也提供一些分裂和組合的函數組,但使用plyr會更簡單快速。但也有局限性

nn

數據拆分成不重複的小數據集,但數據需要重複使用時就不能使用

nn

主函數介紹

nn

輸入有array,dataframe,list三種格式

nn

輸出有array,dataframe,list,discareded四種格式

nn

主要的函數都是以* *ply()開頭的,首字母可以是(d、l、a),第二個字母可以是(d、l、a、_),不同的字母表示不同的數據格式,d表示數據框格式,l表示列表,a表示數組,_則表示沒有輸出。第一個*代表輸入的是什麼格式的數據,第2個星代表的是輸出是以什麼樣的格式保存。

nn

eg:

nn

aaply()輸入是數組(包括矩陣和向量),輸出的也是數組

daply()輸入是數據框,輸出是數組(嘗試用數組作為拆分數據集,報錯)

根據數據集及想要的結果選擇合適的plyr函數操作處理

———————————————————————————————————————

nn

a*ply(data,.margins,fun,.progress="none")

nn

      • l data是要處理的數據,矩陣,數組

      • l margins=1,以行,=2以列進行處理,也可以是自定義的方式進行分割數據

      • l fun 是處理每個分割後數據集的函數

      • l progress="none",是不顯示進度條

對於2維數據,有以下分組方式

對於3維數組,有7種分裂方式

nn

d*ply(data.frame,.variables,.fun,.progress="none")

nn

.variables指定要分割的變數名稱

nn

l*ply(list,fun)

nn

m*ply(data,.fun=NULL,inform=FLASE)-------------把array或者dataframe的參數數值放進函數當中,得到dataframe(mdply),array(maply)list(mlply)

nn

輔助函數:以函數作為輸入,以新的函數作為輸出

nn

splat():該函數把原函數中多個參數打包為一個list作為參數,然後輸出新的函數

nn

優點:當你想把數據框或者數組裡的一行的數據作為參數賦給一個函數,用splat()函數就可以省去人為把數據框拆分的麻煩

nn

例子:

nn

      • hp_per_cyl<-function(hp,cyl,...) hp/cyl

      • splat(hp_per_cyl)(mtcars[1,]) #第一行

      • splat(hp_per_cyl)(mtcars) #所有行

      • m*ply(a_matrix,FUN)的作用和a*ply(a_matrix,1,splat(FUN))一樣

例子:

nn

      • data=data.frame(n=c(5,10,10),mean=c(5,5,5),sd=c(1,2,2))

      • mlply(data,rnorm)

      • alply(data,1,splat(rnorm))

failwith()作用:修正一個函數,使得當該函數出現錯誤時返回一個默認值

nn

參數:default;f是要修正的函數;quiet是設定錯誤信息是否顯示,默認值為FALSE,為顯示設定要返回的默認值是錯誤信息

nnnn

each():作用:用一系列的函數作用在輸入的數據上,並返回一個已命名的向量

nn

不足:不能給作用的函數指定附加的參數

nn

each(min, max)(x) 等價於 function(x) c(min = min(x), max =nmax(x))。

nnnn

colwise():作用:把作用於數據框行向量的函數(如mean,median)轉化為作用於數據框列向量的函 數,可以結合base R的函數使用,與d*ply一起使用時十分方便

nn

參數:.fun是要轉化的函數;.cols可以是測試數據框的列是否應包含的判別函數或者是要包含的列的名稱

nn

另外還有衍生的catcolwise()和numcolwise()函數,它們分別針對的時函數只在離散和數值型的變數上操作

nn

例子:統計baseball各列向量的缺失值個數

nn

      • nmissing<-function(x)sum(is.na(x))

      • colwise(nmissing)(baseball)

      • ddply(baseball,.(year),colwise(nmissing)) #以年這列來分類統計各列的缺失值情況

      • ddply(baseball,.(year),colwise(nmissing),.(sb,cs,so)) #同上,並且顯示需要的列的信息

      • ddply(baseball,.(year),colwise(nmissing,c("sb","cs","so")))#同上

      • ddply(baseball,.(year),colwise(nmissing,~sb+cs+so)) #同上

arrange(): 可以方便的給dataframe排序。

nn

arrange(df,.(var1),.(var2))

nn

作用:按照列給數據框排序

nn

參數:df為數據框;.var是要按照排序的變數

nn

rename():按變數名而不是變數位置重命名。

nn

count():返回unique值,等價於length(unique(**))。

nn

match_df():方便的配合count()等,選出符合條件的行,有點像merge(…,all=F)的感覺。

nn

join():合併


推薦閱讀:

TAG:数据分析 |