R語言快餐教程(1) - 我們開始做統(tǒng)計吧

R語言快餐教程(1) - 我們開始做統(tǒng)計吧

R語言簡介

R語言是基于S語言的一種開源實現(xiàn)膳沽。S語言是貝爾實驗室最早開發(fā)的一種用于統(tǒng)計的工具界轩,后來成為商業(yè)的S-PLUS軟件炮温,是一種與SAS和SPSS齊名的統(tǒng)計軟件。

R語言的官方網(wǎng)址是:[https://www.r-project.org/]

R語言的一個重要的優(yōu)勢就是R的生態(tài)柬赐,有大量的高質(zhì)量的第三方的統(tǒng)計和算法相關(guān)的包绰姻。

在R中活下去

獲取幫助

首先我們學(xué)習(xí)如何在R中獲取函數(shù)幫助和函數(shù)的例子枉侧。

help(函數(shù)名)
例:比如我們想知道標(biāo)準差函數(shù)sd的用法:

help(sd)

輸出就是標(biāo)準差函數(shù)的用法信息:

sd                    package:stats                    R Documentation

Standard Deviation

Description:

     This function computes the standard deviation of the values in
     ‘x’.  If ‘na.rm’ is ‘TRUE’ then missing values are removed
     before computation proceeds.

Usage:

     sd(x, na.rm = FALSE)
     
Arguments:

       x: a numeric vector or an R object which is coercible to one by
          ‘a(chǎn)s.double(x)’.

   na.rm: logical.  Should missing values be removed?

Details:

     Like ‘var’ this uses denominator n - 1.

     The standard deviation of a zero-length vector (after removal of
     ‘NA’s if ‘na.rm = TRUE’) is not defined and gives an error.
     The standard deviation of a length-one vector is ‘NA’.

See Also:

     ‘var’ for its square, and ‘mad’, the most robust alternative.

Examples:

     sd(1:2) ^ 2

詳細例子

R對于很多函數(shù)都有非常詳盡的例子,對于圖形類的函數(shù)狂芋,還圖文并茂榨馁。

格式:example(函數(shù)名)

例:

> example(sd)

sd> sd(1:2) ^ 2
[1] 0.5

大家可以試試圖形的函數(shù),如:

example(hist)

執(zhí)行一個R文件

寫好的R文件帜矾,可以通過source("filename.R")的形式裝載進來翼虫。

保存和讀取數(shù)據(jù)

可以通過save函數(shù)將R的內(nèi)存數(shù)據(jù)保存到一個Rdata文件中。下次再通過load()函數(shù)讀取出來屡萤。

例:

save(gun_data,file="gun_data.Rdata")

安裝CRAN上的擴展包

我們在學(xué)習(xí)R的語法之前珍剑,就先學(xué)習(xí)如何下載擴展包,因為將來有很多任務(wù)死陆,我們就是要靠擴展包來完成的次慢。

命令:install.packages("包名")

例:

install.packages("fBasics")

下載了之后,還需要在使用之前通過library()函數(shù)將庫裝載進來:
比如我要使用timeDate庫:

library(timeDate)

讀取csv數(shù)據(jù)

既然要處理數(shù)據(jù),肯定要先從數(shù)據(jù)源讀取數(shù)據(jù)迫像。我們選取最簡單的方式劈愚,從csv文件中讀取。

假設(shè)我們有這樣一個csv文件:

times,total, copy
1,122.18138504,48.200
2,114.014596224,38.447
3,113.279325008,37.968
4,117.902994871,37.850
5,112.485991001,37.020
6,113.543860197,37.302
7,112.150246143,36.432
8,110.57020092,36.794
9,112.11462307,37.218
10,117.439277172,37.399

我們使用read.csv函數(shù)將其讀到gun

gun_data <- read.csv("gun-1128-2.csv",header=T,col.names=c("times","total","copy"))

c()函數(shù)用于生成向量闻妓。R語言中沒有標(biāo)量菌羽,看著來像標(biāo)量的,其實也是長度為1的向量由缆。

讀到gun_data中后注祖,就可以通過行和列來訪問數(shù)據(jù)了。

可以用下標(biāo)訪問:

gun_data[,2]
  [1] 122.1814 114.0146 113.2793 117.9030 112.4860 113.5439 112.1502 110.5702
  [9] 112.1146 117.4393 112.5256 112.2260 109.8838 118.0142 111.8233 112.9887
 [17] 113.0641 112.2024 112.2671 111.3121 111.4523 112.3540 111.6928 112.7954
 [25] 110.7357 110.3518 115.5703 111.7312 112.3798 111.7919 111.9345 113.4122
 [33] 112.2419 111.8948 110.8999 111.8572 112.7399 112.7252 112.6550 111.7474
 [41] 109.7888 111.1741 110.6528 112.0334 113.1800 112.9429 111.2413 112.3243
 [49] 113.6774 110.8865 112.2398 112.5997 110.9474 111.6045 113.1162 112.7430
 [57] 111.4020 113.6355 114.9378 112.1180 111.0081 111.6405 112.9142 110.6213
 [65] 112.3076 113.0985 113.9538 112.2582 111.8185 114.2400 114.4118 112.5618
 [73] 113.2215 112.0616 114.1094 125.1672 125.7026 114.0470 113.8599 119.5466
 [81] 113.7481 118.8992 116.7088 114.9942 115.2779 115.9557 112.9537 113.7493
 [89] 114.1442 113.9163 112.8527 119.0420 113.5002 112.9147 113.5229 113.1191
 [97] 112.1945 113.7664 111.7049 113.3210

可以用雙括號加下標(biāo)訪問:

> gun_data[[2]]
  [1] 122.1814 114.0146 113.2793 117.9030 112.4860 113.5439 112.1502 110.5702
  [9] 112.1146 117.4393 112.5256 112.2260 109.8838 118.0142 111.8233 112.9887
 [17] 113.0641 112.2024 112.2671 111.3121 111.4523 112.3540 111.6928 112.7954
 [25] 110.7357 110.3518 115.5703 111.7312 112.3798 111.7919 111.9345 113.4122
 [33] 112.2419 111.8948 110.8999 111.8572 112.7399 112.7252 112.6550 111.7474
 [41] 109.7888 111.1741 110.6528 112.0334 113.1800 112.9429 111.2413 112.3243
 [49] 113.6774 110.8865 112.2398 112.5997 110.9474 111.6045 113.1162 112.7430
 [57] 111.4020 113.6355 114.9378 112.1180 111.0081 111.6405 112.9142 110.6213
 [65] 112.3076 113.0985 113.9538 112.2582 111.8185 114.2400 114.4118 112.5618
 [73] 113.2215 112.0616 114.1094 125.1672 125.7026 114.0470 113.8599 119.5466
 [81] 113.7481 118.8992 116.7088 114.9942 115.2779 115.9557 112.9537 113.7493
 [89] 114.1442 113.9163 112.8527 119.0420 113.5002 112.9147 113.5229 113.1191
 [97] 112.1945 113.7664 111.7049 113.3210

可以用列名訪問

> gun_data[["total"]]
  [1] 122.1814 114.0146 113.2793 117.9030 112.4860 113.5439 112.1502 110.5702
  [9] 112.1146 117.4393 112.5256 112.2260 109.8838 118.0142 111.8233 112.9887
 [17] 113.0641 112.2024 112.2671 111.3121 111.4523 112.3540 111.6928 112.7954
 [25] 110.7357 110.3518 115.5703 111.7312 112.3798 111.7919 111.9345 113.4122
 [33] 112.2419 111.8948 110.8999 111.8572 112.7399 112.7252 112.6550 111.7474
 [41] 109.7888 111.1741 110.6528 112.0334 113.1800 112.9429 111.2413 112.3243
 [49] 113.6774 110.8865 112.2398 112.5997 110.9474 111.6045 113.1162 112.7430
 [57] 111.4020 113.6355 114.9378 112.1180 111.0081 111.6405 112.9142 110.6213
 [65] 112.3076 113.0985 113.9538 112.2582 111.8185 114.2400 114.4118 112.5618
 [73] 113.2215 112.0616 114.1094 125.1672 125.7026 114.0470 113.8599 119.5466
 [81] 113.7481 118.8992 116.7088 114.9942 115.2779 115.9557 112.9537 113.7493
 [89] 114.1442 113.9163 112.8527 119.0420 113.5002 112.9147 113.5229 113.1191
 [97] 112.1945 113.7664 111.7049 113.3210

查詢內(nèi)存中的對象

ls()函數(shù)

例:

> ls()
 [1] "C."            "C1"            "C2"            "C3"           
 [5] "Cl"            "clK"           "clS"           "EV"           
 [9] "gun_1128"      "gun_data"      "gun_data3"     "gun_data4"    
[13] "i"             "inst_qq"       "inst_qq_5_1"   "inst_qq_5_4_1"
[17] "op"            "out"           "r"             "R."           
[21] "Rc"            "Rp"            "swM"           "total_data"   
[25] "x"      

我們開始做統(tǒng)計吧

下面我們開始學(xué)一些短平快的做統(tǒng)計的方法吧均唉。

均值

最簡單的就是平均值了是晨。所有的數(shù)求和,再除以個數(shù)就是了舔箭。
R語言中用mean()函數(shù)來求均值罩缴。
例:

> mean(gun_data3[[2]])
[1] 103.1747
> mean(gun_data4[[2]])
[1] 113.3303

中位數(shù)

均值的問題在于,如果異常值比較大层扶,會把均值拉高或拉低箫章。而中位數(shù)是排序后處于中間的數(shù),不受異常值的影響镜会。
R語言中用median函數(shù)求中位數(shù):

> median(gun_data3[[2]])
[1] 101.651
> median(gun_data4[[2]])
[1] 112.7326

五數(shù)

所謂五數(shù)檬寂,就是最小值,25%分位值戳表,中位數(shù)桶至,75%分位值,最大值匾旭。
這五個數(shù)可以通過fivenum()函數(shù)一次性求出來镣屹。

> fivenum(gun_data3[["total"]])
[1]  98.92649 100.48752 101.65097 105.94518 116.74337
> fivenum(gun_data4[["total"]])
[1] 109.7888 111.8402 112.7326 113.7578 125.7026

連同均值,summary函數(shù)能一次將6個數(shù)都求出來:

> summary(gun_data3[,"total"])
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  98.93  100.50  101.70  103.20  105.80  116.70 
> summary(gun_data4[,"total"])
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  109.8   111.8   112.7   113.3   113.8   125.7 

方差

方差是各樣本值與均值的差值的平方的和季率,反映了數(shù)據(jù)的離散程度野瘦。

> var(gun_data3[,"total"])
[1] 12.70904
> var(gun_data4[,"total"])
[1] 7.397949

標(biāo)準差

方差的平方根是標(biāo)準差。R語言用sd()函數(shù)求標(biāo)準差

> sd(gun_data3[,"total"])
[1] 3.564974
> sd(gun_data4[,"total"])
[1] 2.719917

標(biāo)準差是方差的平方根飒泻,我們用R語言驗證一下:

> sqrt(var(gun_data3[,"total"]))
[1] 3.564974

果然跟sd()的值是一樣的

離差

離差是R中提供的一個特殊功能鞭光,它是相對于中位數(shù)的偏差的絕對值和:

mad(x) = 1/qnorm(3/4) * median(abs(x-median(x)))

離差用mad()函數(shù)計算。

偏度

如果結(jié)果不符合正態(tài)分布泞遗,我們希望知道是向左偏還是向右偏惰许,這個值用偏度skewness來表示。R中用skewness()函數(shù)來計算史辙。如果值>0為右偏汹买,反之為左偏佩伤。

求偏度的函數(shù),首先要通過install.packages來下載fBasics庫晦毙,然后引入timeDate庫:

> library(timeDate)
> skewness(gun_data3[,2])
[1] 1.109821
attr(,"method")
[1] "moment"
> skewness(gun_data4[,2])
[1] 2.40715
attr(,"method")
[1] "moment"

從中可以看以生巡,這兩組數(shù)據(jù)都向右偏。gun_data4偏得更厲害见妒。

峰度

峰度是判斷這個分布是比正態(tài)分布的圖更尖還是更平孤荣。
R中用kurtosis()函數(shù)來計算

> kurtosis(gun_data3[,2])
[1] 0.7986081
attr(,"method")
[1] "excess"
> kurtosis(gun_data4[,2])
[1] 7.060265
attr(,"method")
[1] "excess"

上面的兩個分布都>0,說明比正態(tài)分布都要尖须揣。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盐股,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子耻卡,更是在濱河造成了極大的恐慌疯汁,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卵酪,死亡現(xiàn)場離奇詭異幌蚊,居然都是意外死亡,警方通過查閱死者的電腦和手機凛澎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門霹肝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來估蹄,“玉大人塑煎,你說我怎么就攤上這事〕粢希” “怎么了最铁?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長垮兑。 經(jīng)常有香客問我冷尉,道長,這世上最難降的妖魔是什么系枪? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任雀哨,我火速辦了婚禮,結(jié)果婚禮上私爷,老公的妹妹穿的比我還像新娘雾棺。我一直安慰自己,他們只是感情好衬浑,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布捌浩。 她就那樣靜靜地躺著,像睡著了一般工秩。 火紅的嫁衣襯著肌膚如雪尸饺。 梳的紋絲不亂的頭發(fā)上进统,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機與錄音浪听,去河邊找鬼螟碎。 笑死,一個胖子當(dāng)著我的面吹牛迹栓,可吹牛的內(nèi)容都是我干的抚芦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼迈螟,長吁一口氣:“原來是場噩夢啊……” “哼叉抡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起答毫,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤褥民,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后洗搂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體消返,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年耘拇,在試婚紗的時候發(fā)現(xiàn)自己被綠了撵颊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡惫叛,死狀恐怖倡勇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嘉涌,我是刑警寧澤妻熊,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站仑最,受9級特大地震影響扔役,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜警医,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一亿胸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧预皇,春花似錦侈玄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至溯街,卻和暖如春诱桂,著一層夾襖步出監(jiān)牢的瞬間洋丐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工挥等, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留友绝,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓肝劲,卻偏偏與公主長得像迁客,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子辞槐,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容