文章目錄
1. R自帶函數
2. reshape2數據重構
3. dplyr
4. tidyr
5. 字符串處理
1. R自帶函數
1.1 轉置
使用函數t()可對一個矩陣或數據框進行轉置,對於數據框,行名將變成變量(列)名。
數列array進行維度轉換 aperm
1.2 整合數據aggregate
在R中使用一個或多個by變量和一個預先定義好的函數來折疊(collapse)數據。調用格式為:
aggregate(x, by, FUN)
其中x是待折疊的數據對象,by飾一個變量名組成的列表,這些變量將被去掉以新的觀測,而FUN則是用來計算表述性統計量的標量函數,它將被用來計算新觀測中的值。
by中的變量必須在一個列表中(即使只有一個變量)。也可以在列表中為各組聲明自定義的名稱,例如by=list(Group.cyl=cyl,Group.gears=gear)。
1.3 apply
待整理
1.4 union和intersect
1.5 合並 cbind和rbind
縱向合並數據通常用於向數據框中添加觀測。
(1)rbind() :縱向合並兩個數據框(數據集)
(2)cbind() :橫向合並兩個數據框(數據集)
注:兩個數據框行(列)數必須相同。如果x中擁有y中沒有的變量,在合並它們之前需做以下處理:
(1)刪除dataframeA中的多余變量;
(2)在dataframeB中創建追加的變量並將其值設為NA(缺失)。
1.6 匹配合並 merge
merge效果同dplyr的join,join的效力更高。
(1)inner_join 等價於 merge(all=F)
(2)left_join 等價於 merge(all.x=T, all.y=F)
(3)right_join 等價於 merge(all.x=F, all.y=T)
(4)full_join 等價於 merge(all=T)
1.7 排除重復數據 unique
unique 函數可以去掉向量、數據框或類似數列的數據中重復的元素。
2. reshape2包
首先將數據“融合”(melt),以使每一行都是一個唯一的標識符-變量組合。然后將數據“重鑄”(cast),可以使用任何函數對數據進行整合成想要的任何形狀。
注:reshape包的重鑄函數為cast(),reshape2包的重鑄函數為dcast()和acast()
2.1融合-melt
數據集的融合是將它重構為這樣一種格式:每個測量變量獨占一行,行中帶有要唯一確定這個測量所需的標識符變量。
2.2重鑄-dcast和acast
Use acastor dcastdepending on whether you want vector/matrix/array output or data frame output. Data frames can have at most two dimensions.
1.dcast——返回的結果是一個數據框
2.acast——返回的結果可以是向量、矩陣或者數組
調用格式為:
其中md為已融合的數據,formula描述想要的結果,FUN是(可選的)數據整合函數。
接受的公式形如:
在這個公式中,rowvar1 + rowvar2 + ... 定義了要划掉的變量集合,以確定各行的內容,而colvar1 + colvar2 + ... 則定義了要划掉的、確定各列內容的變量集合。
3. dplyr
3.1 基本操作
3.1.1 數據類型
將過長過大的數據集轉換為顯示更友好的 tbl_df 類型
3.1.2 篩選filter
按給定的邏輯判斷篩選出符合要求的子數據集, 類似於 base::subset() 函數
用R自帶函數實現:
除了代碼簡潔外, 還支持對同一對象的任意個條件組合, 如:
3.1.3 排列 arrange
用R自帶函數實現:
3.1.4 選擇select
用列名作參數來選擇子數據集:
排除列名:
select的特殊函數
(1)starts_with(x, ignore.case = TRUE): names starts with x
(2)ends_with(x, ignore.case = TRUE): names ends in x
(3)contains(x, ignore.case = TRUE): selects all variables whose name contains
(4)matches(x, ignore.case = TRUE): selects all variables whose name matches the regular expression x
(5)num_range("x", 1:5, width = 2): selects all variables (numerically) from x01 to x05.
(6)one_of("x", "y", "z"): selects variables provided in a character vector.
(7)everything(): selects all variables.
":" 選擇連續列,contains來匹配列名
同樣類似於R自帶的subset() 函數.
3.1.5 添加新變量mutate
對已有列進行數據運算並添加為新列:
mutate_each()
對每一列運行窗體函數。
plyr::mutate() 與 base::transform() 相似, 優勢在於可以在同一語句中對剛增加的列進行操作。
通過data.frame有可以實現
3.1.6 匯總summarise
count()
3.1.7 tally
3.2 分組group_by
當對數據集通過 group_by() 添加了分組信息后,mutate(), arrange() 和 summarise() 函數會自動對這些 tbl 類數據執行分組操作 (R語言泛型函數的優勢).
另: 一些匯總時的小函數
n(): 計算個數 n_distinct(x): 計算 x 中唯一值的個數
3.3 鏈式操作(管道) %>% 或 %.%
dplyr包還新引進了一個操作符,讀成then,使用時把數據名作為開頭, 然后依次對此數據進行多步操作。比如:
按數據處理的思路寫代碼, 一步步深入, 既易寫又易讀, 接近於從左到右的自然語言順序, 對比一下用R自帶函數實現的.
文章里還表示: 通過 %>% 那段代碼比跑上面這段代碼,運算速度提升很多倍.
至於這個新鮮的概念會不會和 ggplot2 里的 + 連接號一樣, 發揮出種種奇妙的功能呢? 還是在實際使用中多體驗感受吧.
3.5 數據匹配合並join
(1)inner_join(x, y) :只包含同時出現在x,y表中的行
(2)left_join(x, y) :包含所有x中以及y中匹配的行
(3)semi_join(x, y) :包含x中,在y中有匹配的行,結果為x的子集
(4)anti_join(x, y) :包含x中,不匹配y的行,結果為x的子集,與semi_join相反
(5)full_join(x, y) :包含所以x、y中的行
(6)right_join(x, y) :包含所有y中以及x中匹配的行
3.6 連接數據庫
(1)dplyr 可以連接數據庫
(1)使用與本地數據框操作一樣的語法
(3)只支持生成SELECT語句
(4)支持SQLite, PostgreSQL/Redshift, MySQL/MariaDB, BigQuery, MonetDB
3.7 利用窗體函數變換數據
4. tidyr
tidyr包的作者也是Hadley Wickham, 與dplyr包結合使用,是reshape2包的替代。(先挖坑...)
5. 字符串處理
5.1 字符個數 nchar
nchar()能夠獲取字符串的長度,它和length()的結果是有區別的。
5.2 連接字符 paste
paste()不僅可以連接多個字符串,還可以將對象自動轉換為字符串再相連,另外它還能處理向量,所以功能更強大。
paste默認的分隔符是空格,必須指定sep=""。還有一個collapse參數,可以把這些字符串拼成一個長字符串,而不是放在一個向量中。
5.3 分割字符 strsplit
5.4 提取字符 substr與substring
5.5 替換字符 sub和gsub
(1)sub 只做一次替換(不管有幾次匹配)
(2)gsub 把滿足條件的匹配都做替換
雖然sub和gsub是用於字符串替換的函數,但嚴格地說R語言沒有字符串替換的函數,因為R語言不管什么操作對參數都是傳值不傳址。所以原字符串並沒有改變,要改變原變量我們只能通過再賦值的方式。
sub和gsub函數可以使用提取表達式(轉義字符+數字)讓部分變成全部
5.6 字符查詢匹配 grep
(1)grep 返回匹配項的下標
(2)grepl 返回所有查詢結果的邏輯向量
(3)regexpr
(4)gregexpr
(5)regexecregexpr、gregexpr和regexec這三個函數返回的結果包含了匹配的具體位置和字符串長度信息,可以用於字符串的提取操作。
5.7 其他
(1)大小寫轉換 tolower與toupper
(2)列表轉換為向量unlist
(3)unlist(x, recursive = TRUE, use.names = TRUE)
(4)重復輸入rep()
轉自:http://mt.sohu.com/20161021/n470849946.shtml