第5章--高級數據管理

5.1 數值和字符處理函數

常用的數學函數

統計函數

例子:

> x <- c(1,2,3,4,5,6,7,8)
> mean(x)
[1] 4.5
> sd(x)
[1] 2.44949

默認情況下,函數scale()對矩陣或數據框的指定列進行均值為0、標準差為1的標準化:

newdata <- scale(mydata)

要對每一列進行任意均值和標準差的標準化,可以使用以下代碼:

newdata <- scale(mydata)*SD + M

概率函數

概率函數通常用來生成特征已知的模擬數據,以及在用戶編寫的統計函數中計算概率值。

?

字符處理函數

?

其他實用函數

示例:

R函數可以應用到一系列的數據對象上,包括標量,向量,矩陣,數組和數據框。

> a <- 5
> sqrt(a)
[1] 2.236068
> b <- c(1.243,5.654,2.99)
> round(b)
[1] 1 6 3
> c <- matrix(runif(12),nrow=3)
> c[,1]       [,2]      [,3]       [,4]
[1,] 0.1994530 0.13714175 0.9197887 0.92626099
[2,] 0.1545716 0.05410748 0.7442934 0.20239342
[3,] 0.3898991 0.71826297 0.4518926 0.02659162

? > log(c)
? ? ? ? ? ? [,1] ? ? ? [,2] ? ? ?[,3] ? ? ? [,4]
? [1,] -1.6121766 -1.9867402 -0.08361129 -0.07659924
? [2,] -1.8670979 -2.9167828 -0.29531995 -1.59754183
? [3,] -0.9418672 -0.3309195 -0.79431077 -3.62715915

? > mean(c)
? [1] 0.4103881

上面的mean函數是求整個矩陣的平均數,如果要分別求整行或者整列的平均數時,R提供了一個apply()函數,使用格式為:

apply(x, MARGIN, FUN,...)

MARGIN=1表示行,MARGIN=2表示列。

> mydata <- matrix(rnorm(30),nrow=6)
> mydata[,1]       [,2]        [,3]        [,4]       [,5]
[1,]  0.04888185 -1.6841123  0.20826767 -0.18079844  0.8770435
[2,]  2.24945461 -0.1110540 -0.88960378 -0.28632932 -1.9787470
[3,] -0.14309448  0.4394450 -0.04371930 -0.71101344  0.2028341
[4,] -0.90665601 -0.7176465  0.38136328 -0.06082567 -0.3844853
[5,] -0.40884645 -0.3192920  0.08476159 -0.47544146  0.1809374
[6,]  1.40852339  0.3653756  0.09148512 -1.06787472  1.0503215
> apply(mydata,1,mean)
[1] -0.14614355 -0.20325589 -0.05110963 -0.33765005 -0.18757618  0.36956618
> apply(mydata,2,mean)
[1]  0.374710485 -0.337880697 -0.027907572 -0.463713840 -0.008682649
> apply(mydata,2,mean,trim=0.2)
[1]  0.22636608 -0.19565422  0.08519877 -0.41339566  0.21908240

apply()是一個很強大的函數,可以把函數應用到數組的某個維度上,而lapply()和sapply()則可將函數應用到列表上。

示例:將學生的各科考試成績組合為單一成績衡量指標、基于相對名次(前20%,下20%,等等)給出從A到F的評分、根據學生姓氏和名字的首字母對花名冊進行排序。

1. 限定輸出小數點后數字的位數。

> rosterStudent Math Science English
1         John Davis  502      95      25
2    Angela Williams  600      99      22
3   Bullwinkle Moose  412      80      18
4        David Jones  358      82      15
5  Janice Markhammer  495      75      20
6     Cheryl Cushing  512      85      28
7     Reuven Ytzrhak  410      80      15
8          Greg Knox  625      95      30
9       Joel England  573      89      27
10      Mary Rayburn  522      86      18

2. 由于數學、科學和英語考試的分值不同,在組合之前要先讓他們變得可以比較。可以使用scale()函數來成績進行標準化表示。

> z <- scale(roster[,2:4])
> zMath     Science     English
1   0.01269128  1.07806562  0.58685145
2   1.14336936  1.59143020  0.03667822
3  -1.02568654 -0.84705156 -0.69688609
4  -1.64871324 -0.59036927 -1.24705932
5  -0.06807144 -1.48875728 -0.33010394
6   0.12806660 -0.20534583  1.13702468
7  -1.04876160 -0.84705156 -1.24705932
8   1.43180765  1.07806562  1.50380683
9   0.83185601  0.30801875  0.95363360
10  0.24344191 -0.07700469 -0.69688609
attr(,"scaled:center")Math Science English 500.9    86.6    21.8 
attr(,"scaled:scale")Math   Science   English 
86.673654  7.791734  5.452828 

3. 然后,可以通過mean()函數來計算各行的均值以獲得綜合評分,并使用cbind()將其添加到花名冊中

> score <- apply(z,1,mean)
> roster <- cbind(roster, score)
> rosterStudent Math Science English      score
1         John Davis  502      95      25  0.5592028
2    Angela Williams  600      99      22  0.9238259
3   Bullwinkle Moose  412      80      18 -0.8565414
4        David Jones  358      82      15 -1.1620473
5  Janice Markhammer  495      75      20 -0.6289776
6     Cheryl Cushing  512      85      28  0.3532485
7     Reuven Ytzrhak  410      80      15 -1.0476242
8          Greg Knox  625      95      30  1.3378934
9       Joel England  573      89      27  0.6978361
10      Mary Rayburn  522      86      18 -0.1768163

4. quantile()給出了學生綜合得分的百分位數

> y <- quantile(roster$score, c(.8,.6,.4,.2) )
> y80%        60%        40%        20% 0.7430341  0.4356302 -0.3576808 -0.8947579 

5. 通過使用邏輯運算符,你可以將學生的百分位數排名重編碼為一個新的類別型成績變量。

> roster$grade[score >= y[1]] <- "A"
> roster$grade[score < y[1] & score > y[2]] <- "B"
> roster$grade[score < y[2] & score > y[3]] <- "C"
> roster$grade[score < y[3] & score > y[4]] <- "D"
> roster$grade[score < y[4]] <- "F"
> rosterStudent Math Science English      score grade
1         John Davis  502      95      25  0.5592028     B
2    Angela Williams  600      99      22  0.9238259     A
3   Bullwinkle Moose  412      80      18 -0.8565414     D
4        David Jones  358      82      15 -1.1620473     F
5  Janice Markhammer  495      75      20 -0.6289776     D
6     Cheryl Cushing  512      85      28  0.3532485     C
7     Reuven Ytzrhak  410      80      15 -1.0476242     F
8          Greg Knox  625      95      30  1.3378934     A
9       Joel England  573      89      27  0.6978361     B
10      Mary Rayburn  522      86      18 -0.1768163     C

6. 你將使用函數strsplit()以空格為界把學生姓名拆分為姓氏和名字。

?

5.3 控制流

for結構:循環重復地執行一個語句,直到某個變量的值不再包含在序列seq中為止。

for (var in seq) statement

while結構:循環重復地執行一個語句,直到條件不為真為止。

while (cond) statement

if-else結構:控制結構if-else在某個給定條件為真時執行語句,也可以同時在條件為假時執行另外的語句。

if (cond) statement1 else statement2

ifelse結構:這個結構是上一個結構的比較緊湊的向量化版本。

ifelse(cond, statement1, statement2)

switch結構:根據一個表達式的值選擇語句執行。

switch(expr,...)

?

5.4 用戶自編函數

function()

myfunction <- function(arg1, arg2, ...){statementsreturn(object)
}

函數中的對象只在函數內部使用。返回對象的數據類型是任意的,從標量到

5.5 整合與重構

1.轉置

轉置(反轉行和列)是重塑數據集的眾多方法中最簡單的一個,用函數t()即可對一個矩陣或數據框進行轉置。

> cars <- mtcars[1:5,1:4]
> carsmpg cyl disp  hp
Mazda RX4         21.0   6  160 110
Mazda RX4 Wag     21.0   6  160 110
Datsun 710        22.8   4  108  93
Hornet 4 Drive    21.4   6  258 110
Hornet Sportabout 18.7   8  360 175
> t(cars)Mazda RX4 Mazda RX4 Wag Datsun 710 Hornet 4 Drive Hornet Sportabout
mpg         21            21       22.8           21.4              18.7
cyl          6             6        4.0            6.0               8.0
disp       160           160      108.0          258.0             360.0
hp         110           110       93.0          110.0             175.0

2.整合數據

在R中使用一個或多個by變量和一個預先定義好的函數來折疊數據是比較容易的。

aggregate(x, by, FUN)

其中x是待折疊對象,by是一個變量名組成的列表,這些變量將被去掉以形成新的觀測,而FUN則是用來計算描述性統計量的標量函數,他將被用來計算新的觀測值。

> options(digits=3)
> attach(mtcars)
> aggdata <- aggregate(mtcars,by=list(cyl,gear),FUN=mean,na.rm=TRUE)
> aggdataGroup.1 Group.2  mpg cyl disp  hp drat   wt qsec  vs   am gear carb
1       4       3 21.5   4  120  97 3.70 2.46 20.0 1.0 0.00    3 1.00
2       6       3 19.8   6  242 108 2.92 3.34 19.8 1.0 0.00    3 1.00
3       8       3 15.1   8  358 194 3.12 4.10 17.1 0.0 0.00    3 3.08
4       4       4 26.9   4  103  76 4.11 2.38 19.6 1.0 0.75    4 1.50
5       6       4 19.8   6  164 116 3.91 3.09 17.7 0.5 0.50    4 4.00
6       4       5 28.2   4  108 102 4.10 1.83 16.8 0.5 1.00    5 2.00
7       6       5 19.7   6  145 175 3.62 2.77 15.5 0.0 1.00    5 6.00
8       8       5 15.4   8  326 300 3.88 3.37 14.6 0.0 1.00    5 6.00

3. reshape包

融合

數據集的融合是將它重構為這樣一種樣式:每個測量變量獨占一行,行中帶有要唯一確定這個測量所需的標識符變量。

此處用R內置的數據集,首先將列明改寫成小寫,然后查看相應的數據

> names(airquality) <- tolower(names(airquality))
> head(airquality)ozone solar.r wind temp month day
1    41     190  7.4   67     5   1
2    36     118  8.0   72     5   2
3    12     149 12.6   74     5   3
4    18     313 11.5   62     5   4
5    NA      NA 14.3   56     5   5
6    28      NA 14.9   66     5   6

先看用melt處理上述數據:

> aql <- melt(airquality)
No id variables; using all as measure variables
> head(aql)variable value
1    ozone    41
2    ozone    36
3    ozone    12
4    ozone    18
5    ozone    NA
6    ozone    28
> tail(aql)variable value
913      day    25
914      day    26
915      day    27
916      day    28
917      day    29
918      day    30

默認情況下,melt認為所有數值列的變量均有值。很多情況下,這都是我們想要的情況。在這里,我們想知道每個月(month)以及每天(day)的ozone, solar.r, wind以及temp的值。因此,我們需要告訴meltmonthday是"ID variables"。ID variables就是那些能夠區分不同行數據的變量,個人感覺類似于數據庫中的主鍵。

> aql <- melt(airquality, id.vars = c("month", "day"))
> head(aql)month day variable value
1     5   1    ozone    41
2     5   2    ozone    36
3     5   3    ozone    12
4     5   4    ozone    18
5     5   5    ozone    NA
6     5   6    ozone    28

如果我們想修改長數據中的列名:

> aql <- melt(airquality, id.vars = c("month", "day"),variable.name = "climate_variable", value.name = "climate_value")
> head(aql)month day climate_variable climate_value
1     5   1            ozone            41
2     5   2            ozone            36
3     5   3            ozone            12
4     5   4            ozone            18
5     5   5            ozone            NA
6     5   6            ozone            28

cast函數

在reshape2中有好幾個cast版本的函數。若你經常使用data.frame,就需要使用dcast函數。acast函數返回向量、矩陣或者數組。

dcast借助于公式來描述數據的形狀,左邊參數表示"ID variables",而右邊的參數表示measured variables。可能需要幾次嘗試,才能找到合適的公式。

這里,我們需要告知dcastmonthday是ID variables,variable則表示measured variables。

轉載于:https://www.cnblogs.com/cyoutetsu/p/5944943.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/256243.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256243.shtml
英文地址,請注明出處:http://en.pswp.cn/news/256243.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在思科無線控制器上查看5GHz和2.4GHz的客戶端數量

在圖形界面下找了好長時間也沒有看到在哪里&#xff0c;在CLI界面下找到了相應的命令&#xff0c;命令如下&#xff1a; (Cisco Controller) >show client ap 802.11a allMAC Address AP Id Status WLAN Id Authenticated ----------------- ------ -…

【圖像處理】——實現二值圖像的輪廓邊界跟蹤以及輪廓面積周長的求解(connectedComponentsWithStats()函數和connectedComponents()函數)

目錄 一、cv2.connectedComponents() 函數原型: 輸入參數解析: 返回參數解析: 二、cv2.connectedC

Halcon閾值分割方法簡析

1. 基于直方圖的自動閾值分割 1.1 關鍵算子 auto_threshold(Image : Regions : Sigma : )&#xff1a;使用多閾值分割單通道圖像。 首先&#xff0c;計算圖像的灰度直方圖。 然后&#xff0c;使用標準差為Sigma的一維高斯濾波器對直方圖進行濾波。 進而&#xff0c;從直方圖中…

GSM BTS Hacking: 利用BladeRF和開源BTS 5搭建基站

GSM BTS Hacking: 利用BladeRF和開源BTS 5搭建基站 引文 如果你已經購買了Nuand&#xff08;官方&#xff09;BladeRF x40&#xff0c;那么就可以在上面運行OpenBTS并可以輸入一些指令來完成一些任務。一般來說HackRF&#xff0c;是一款覆蓋頻率最寬的SDR板卡。它幾乎所有的信息…

夜深人靜,想規劃一下短期

截止寫到這里的時候&#xff0c;已經是農歷的十一月初六了&#xff0c;算算時間&#xff0c;距離過年也不太遙遠了。就只有短短50多天左右。 很多事想做沒有時間&#xff0c;很多程序要改&#xff0c;沒有時間&#xff1b;很多想法想付諸行動&#xff0c;總是半途而廢。時間久這…

【圖像處理】——Python+opencv實現提取圖像的幾何特征(面積、周長、細長度、區間占空比、重心、不變矩等)

轉載請注明詳細地址本文簡單介紹了圖像常見幾何特征的概念以及求解方法本文介紹了Python和opencv求解幾何特征的常用方法目錄 其他形狀外接輪廓的方法可以參考:《OpenCV-Python——第17.3章:輪廓形狀擬合(邊界矩形,最小外接圓...)及性質》 一、獲得輪廓 二、面積 1、c…

Linux 中斷處理淺析

最近在研究異步消息處理, 突然想起linux內核的中斷處理, 里面由始至終都貫穿著”重要的事馬上做, 不重要的事推后做”的異步處理思想. 于是整理一下~第一階段&#xff0d;&#xff0d;獲取中斷號每個CPU都有響應中斷的能力, 每個CPU響應中斷時都走相同的流程. 這個流程就是內核…

C#中泛型的相關知識點總結

一、概念 1.1 泛型 泛型是什么&#xff1f; 書本告訴我們泛型是通過通過參數化類型的方法在同一份代碼上對多種數據類型進行調用。也即是說&#xff0c;如果同一個代碼需要使用不同的數據類型的話就可以定義一個泛型的類或者方法。 泛型的優點是什么&#xff1f; 1.通過使用…

用scikit-learn研究局部線性嵌入(LLE)

1. scikit-learn流形學習庫概述 在scikit-learn中&#xff0c;流形學習庫在sklearn.manifold包中。里面實現的流形學習算法有&#xff1a; 1&#xff09;多維尺度變換MDS算法&#xff1a;這個對應的類是MDS。MDS算法希望在降維時在高維里樣本之間的歐式距離關系在低維可以得到保…

判斷字符串中是否為數字的三種方法

//1用JAVA自帶的函數 public static boolean isNumeric(String str){for (int i str.length();--i>0;){ if (!Character.isDigit(str.charAt(i))){return false;}}return true;}//2用正則表達式 public static boolean isNumeric(String str){ Pattern pattern Pattern.…

【圖像處理】——Python+opencv實現圖像的hu不變矩特征提取(含原理、推導過程、應用、代碼等)

目錄 轉載本文請注明詳細地址本文介紹了矩和圖像矩的含義本文介紹了不變矩的計算、應用本文介紹了如何計算圖像相似度一、思維導圖 二、普通矩的定義 1、零階矩 2、二階矩

MSSQL-to-MySQL v5.3, 從MSSQL遷移到mySQL的最佳工具

將現有的MSSQL數據庫遷移到MySQL數據庫,嘗試了很多種工具 MySQL Workbench / MSSQL to MySQL Export / DB Converter / openDBcopy 都有這樣那樣的問題。 最后發現就MSSQL-to-MySQL好一點&#xff0c;能夠保證所有表和數據成功遷移&#xff0c;并且字段類型都比較正確。 只是對…

C#窗體應用程序崩潰解決方法總結

一、內存不足 內存是最常見的導致程序崩毀的原因&#xff0c;常用解決方式有如下幾種。 算法中聲明的占內存較大的全局變量或類中聲明的私有變量在循環或運行結束后需進行釋放&#xff0c;手動設置Dispose()&#xff0c;然后GC.Collect()。對一些重復調用的類避免多次實例化。…

【學習的心得】——“快餐”的效率與“挖掘”的重要性

從事Python圖像處理和機器學習方向已經有大半年了&#xff0c;現在作為還是一個研究生的我&#xff0c;大部分時間都是在完成老師給的課題任務&#xff0c;但是這幾個月下來我感覺和老師的意見有點分歧了甚至跟一些同學都有所意見分歧了。 Python雖然是最近幾年火起來的語言&a…

Unity3D Input按鍵系統

默認輸入軸&#xff1a; Horizontal 和 Vertical被映射到w, a, s, d鍵和方向鍵 Fire1, Fire2, Fire3被分別映射到Ctrl&#xff0c;Option&#xff08;Alt&#xff09;和Command鍵 Mouse X 和 Mouse Y被映射到鼠標移動增量 Window Shake X 和 Window Shake Y 被映射到窗口的移動…

iOS app 企業內部發布及HTTPS服務器配置

轉自: http://www.cnblogs.com/cocoajin/p/4082488.html iOS企業內部發布及HTTPS服務器配置 一&#xff1a;所需的條件 1. 蘋果開發者證書&#xff0c;企業版 299$ 版本 2. ssl 證書&#xff0c;即https使用的服務器證書 3. web服務器&#xff0c;支持https 4. 一個域名&#x…

Pytorch超簡單安裝教程

安裝Pytorch 1.1 安裝Annaconda 安裝Pytorch首先需要安裝Annaconda&#xff0c;按照教程&#xff0c;安裝了Annaconda5.2.0的版本。 路徑 記住安裝路徑即可&#xff0c;其余均選默認。 1.2 安裝Pytorch 第一步&#xff0c;打開Anaconda Prompt 。然后輸入 conda create -n…

【圖像處理】——紋理特征提取方法(LBP局部二值模式和GLCM灰度共生矩陣)

紋理特征提取方法 局部二值模式(LBP) (結構法) Local binary patterns 原理 將像素點的鄰域八個像素點與中心像素點值進行比較,大于設為1,小于設為0,這樣就會得到一個鄰域值為1和0的格子,將這八個值按照一定的規則排列成一個二進制的數字,并且轉換為十進制作為中心像…

44. 源代碼解讀-RocketMQ-架構

1. 前言 1.1 github源代碼 https://github.com/apache/rocketmq 1.2 github其他客戶端&#xff0c;比如c,php https://github.com/apache/rocketmq-externals 1.3 運行進程 RocketMQ分成兩個進程運行 NamesrvBrokerNamesrv&#xff0c;命名服務&#xff0c;主要負責Broker狀態管…

jquery檢測瀏覽器類型

使用jquery如下代碼檢測瀏覽器版本時&#xff1a;出問題&#xff0c;在檢測IE瀏覽器&#xff0c;如果版本是IE11時&#xff0c;會出現 $.browser.msie的返回值是false&#xff0c;$.browser.mozilla的返回值是true&#xff0c;即把IE11檢測成火狐了 結局辦法 判斷IE瀏覽器用 …