博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
R语言快餐教程(1) - 我们开始做统计吧
阅读量:7026 次
发布时间:2019-06-28

本文共 7130 字,大约阅读时间需要 23 分钟。

R语言快餐教程(1) - 我们开始做统计吧

R语言简介

R语言是基于S语言的一种开源实现。S语言是贝尔实验室最早开发的一种用于统计的工具,后来成为商业的S-PLUS软件,是一种与SAS和SPSS齐名的统计软件。

R语言的官方网址是:[

R语言的一个重要的优势就是R的生态,有大量的高质量的第三方的统计和算法相关的包。

在R中活下去

获取帮助

首先我们学习如何在R中获取函数帮助和函数的例子。

help(函数名)

例:比如我们想知道标准差函数sd的用法:

help(sd)

输出就是标准差函数的用法信息:

sd                    package:stats                    R DocumentationStandard DeviationDescription:     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          ‘as.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对于很多函数都有非常详尽的例子,对于图形类的函数,还图文并茂。

格式:example(函数名)

例:

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

大家可以试试图形的函数,如:

example(hist)

执行一个R文件

写好的R文件,可以通过source("filename.R")的形式装载进来。

保存和读取数据

可以通过save函数将R的内存数据保存到一个Rdata文件中。下次再通过load()函数读取出来。

例:

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

安装CRAN上的扩展包

我们在学习R的语法之前,就先学习如何下载扩展包,因为将来有很多任务,我们就是要靠扩展包来完成的。

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

例:

install.packages("fBasics")

下载了之后,还需要在使用之前通过library()函数将库装载进来:

比如我要使用timeDate库:

library(timeDate)

读取csv数据

既然要处理数据,肯定要先从数据源读取数据。我们选取最简单的方式,从csv文件中读取。

假设我们有这样一个csv文件:

times,total, copy1,122.18138504,48.2002,114.014596224,38.4473,113.279325008,37.9684,117.902994871,37.8505,112.485991001,37.0206,113.543860197,37.3027,112.150246143,36.4328,110.57020092,36.7949,112.11462307,37.21810,117.439277172,37.399

我们使用read.csv函数将其读到gun

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

c()函数用于生成向量。R语言中没有标量,看着来像标量的,其实也是长度为1的向量。

读到gun_data中后,就可以通过行和列来访问数据了。

可以用下标访问:

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[[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

查询内存中的对象

ls()函数

例:

> 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"

我们开始做统计吧

下面我们开始学一些短平快的做统计的方法吧。

均值

最简单的就是平均值了。所有的数求和,再除以个数就是了。

R语言中用mean()函数来求均值。
例:

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

中位数

均值的问题在于,如果异常值比较大,会把均值拉高或拉低。而中位数是排序后处于中间的数,不受异常值的影响。

R语言中用median函数求中位数:

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

五数

所谓五数,就是最小值,25%分位值,中位数,75%分位值,最大值。

这五个数可以通过fivenum()函数一次性求出来。

> 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函数能一次将6个数都求出来:

> 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

方差

方差是各样本值与均值的差值的平方的和,反映了数据的离散程度。

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

标准差

方差的平方根是标准差。R语言用sd()函数求标准差

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

标准差是方差的平方根,我们用R语言验证一下:

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

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

离差

离差是R中提供的一个特殊功能,它是相对于中位数的偏差的绝对值和:

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

离差用mad()函数计算。

偏度

如果结果不符合正态分布,我们希望知道是向左偏还是向右偏,这个值用偏度skewness来表示。R中用skewness()函数来计算。如果值>0为右偏,反之为左偏。

求偏度的函数,首先要通过install.packages来下载fBasics库,然后引入timeDate库:

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

从中可以看以,这两组数据都向右偏。gun_data4偏得更厉害。

峰度

峰度是判断这个分布是比正态分布的图更尖还是更平。

R中用kurtosis()函数来计算

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

上面的两个分布都>0,说明比正态分布都要尖。

转载地址:http://xdmxl.baihongyu.com/

你可能感兴趣的文章
linux 下mongo 基础配置
查看>>
【Dubbo实战】 Dubbo+Zookeeper+Spring整合应用篇-Dubbo基于Zookeeper实现分布式服务(转)...
查看>>
JUnit单元测试中的setUpBeforeClass()、tearDownAfterClass()、setUp()、tearDown()方法小结
查看>>
java之jvm学习笔记六(实践写自己的安全管理器)
查看>>
Docker容器查看ip地址
查看>>
在PC端或移动端应用中接入商业QQ
查看>>
将python3.6软件的py文件打包成exe程序
查看>>
DataTable 排序
查看>>
大白话5分钟带你走进人工智能-第二十节逻辑回归和Softmax多分类问题(5)
查看>>
嵌入式系统在工业控制中的应用
查看>>
使用httpclient异步调用WebAPI接口
查看>>
c++ 类的对象与指针
查看>>
SSTI(模板注入)
查看>>
rbac models
查看>>
[2615]传纸条 sdutOJ
查看>>
类图标注的使用范例
查看>>
NumberFormat注解 DateTimeFormat
查看>>
[转载]PV操作简单理解
查看>>
Acm Dima and Lisa的题解
查看>>
2017 ZSTU寒假排位赛 #7
查看>>