Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >R语言入门

R语言入门

作者头像
若与
发布于 2018-04-25 05:00:20
发布于 2018-04-25 05:00:20
2.5K00
代码可运行
举报
运行总次数:0
代码可运行

最近在复习python的科学计算,突然心血来潮,想看看R的数据处理和python的区别在哪,所以就有了这篇文章。

R语言简介

四十多年前, R 语言的始祖诞生了 , John Chambers 在贝尔实验室中开发出S语言 ,用于快速地进行数据探索, 统计分析和可视化 。十几年后 , 新西兰奥克兰大学的 Robert Gentleman 和 Ross Ihaka 在 S 语言的基础上发明了 R 语言 。

R 语言流淌着统计学的血液 , 它内置了海量的统计函数 ,使用者可以利用其对数据进行快速交互分析 。 同时作为一门图灵完备的解释性语言 , R 的使用者比 SAS , SPSS 等统计软件的使用者拥有了更大程度的自由。

进入 21 世纪后 ,由于个人计算机的普及和统计学科的发展 , R 社群得以进一步发展 , 一些富有想象力的优秀工具涌现出来 。 如果把 R 语言比作一辆车的话 , Rstudio 的出现使得我们有了信息更加丰富的仪表盘 , dplyr , data.table 等等数据处理的包加强了引擎 , ggplot , shiny 等等可视化的工具使得车的外型更好看。

与大多用于工程实践的编程语言相比 , R 语言更像是一个灵巧的研究工具 ,在处理大量数据 , 性能方面比较薄弱。但是与其他工具交互就能漂亮地解决问题 , 例如与 Spark 配合 (sparkR) 解决数据量较大的情况 , 与 C++(Rcpp) 配合可以解决性能不足的问题。

早在五十多年前 , John Tukey 就在论文 "The Future of Data Analysis"[1] 中发表了这样的看法:统计学不应该只是关于统计推断的数学理论,而应该和现实世界联系起来,成为一种“科学”。为了实现这样的目标,需要有收集和整理数据、分析和解释数据的技术,并且把实践当成检验理论的标准。

R语言及其生态作为连接现实世界中的数据和数学模型的桥梁,正在社群的努力下一步一步地把这些想法具体化。

让我们进入 R 语言的世界!

R语言的安装

ubuntu下安装

1、直接到官网上下载安装包(tar.gz),然后依次安装即可。 2、在网速可以的情况下,利用在apt-get安装是一种更为方便的方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo apt-get update
sudo apt-get install r-base
sudo apt-get install r-base-dev

MAC下安装

mac安装更简单 下载R安装包,完成后点安装。

R语言基本数据结构

下面用 R 的解释器来熟悉一下 R 语言的基本数据结构

首先让我们先进入 R 环境下 我是在mac操作环境下的,ubuntu的是一样的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 youdi@liangchangyoudeMacBook-Pro  ~R

R version 3.4.1 (2017-06-30) -- "Single Candle"
Copyright (C) 2017 The R Foundation for Statistical Computing
Platform: x86_64-apple-darwin15.6.0 (64-bit)

R是自由软件,不带任何担保。
在某些条件下你可以将其自由散布。
用'license()''licence()'来看散布的详细条件。

R是个合作计划,有许多人为之做出了贡献.'contributors()'来看合作者的详细情况
用'citation()'会告诉你如何在出版物中正确地引用RR程序包。

用'demo()'来看一些示范程序,用'help()'来阅读在线帮助文件,或
用'help.start()'通过HTML浏览器来看帮助文件。
用'q()'退出R.
>
>

向量

向量是 R 语言中最基本的数据类型,在 R 中没有单独的标量(例如 1 本质上是 c(1)) 。

赋值

R 中可以用 = 或者 <- 来进行赋值 , <-的快捷键是 alt + - 。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> a <- c(4,5,6)
> a
[1] 4 5 6

筛选

我们可以用下标来筛选,例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> a[1:2]
[1] 4 5
> a[3]
[1] 6

注意 R 语言的下标是从 1 开始的。

当然我们也可以用逻辑进行筛选,例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> a[a>4]
[1] 5 6
> a[a>5]
[1] 6

为了了解这个式子的原理,我们先看看 a>4 是什么

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> a>4
[1] FALSE  TRUE  TRUE

我们可以看到这是一个布尔值构成的向量,我们在用这个布尔值 做下标时只会选出答案为 TRUE 的值。 另外,负数下标表示不选这个这些下标,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> a[-1]
[1] 5 6
> a[-2]
[1] 4 6
> a[-3]
[1] 4 5
> a[-4]
[1] 4 5 6

合并向量

c() 可以合并向量,例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> c(a[1] , 3 , a[2:3] , 1)
[1] 4 3 5 6 1

循环补齐

向量有个比较有趣的性质,当两个向量进行操作时,如果长度不等, 长度比较短的一个会复制自己直到自己和长的一样长。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> b
[1] 1 2 3 4 5 6 7 8
> a
[1] 4 5 6
> a + b
[1]  5  7  9  8 10 12 11 13
Warning message:
In a + b : 长的对象长度不是短的对象长度的整倍数
> b <- c(1,2,3,4,5,6,7,8,9)
> a + b
[1]  5  7  9  8 10 12 11 13 15

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> length(b)
[1] 9
> which.max(b)
[1] 9
> which.min(b)
[1] 1

不懂就使用help()查看命令手册

矩阵

矩阵,从本质上来说就是多维的向量,我们来看一看

我们如何新建一个矩阵。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> a <- matrix(c(1,2,3,4,5,6,7,8,9), nrow=3)
> a
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

matrix有很多参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
help(matrix)

Usage:

     matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,
            dimnames = NULL)

     as.matrix(x, ...)
     ## S3 method for class 'data.frame'
     as.matrix(x, rownames.force = NA, ...)

     is.matrix(x)

筛选矩阵

与向量相似,我们可以用下标来筛选矩阵,

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> a[1, 2:3]
[1] 4 7

可以看到结果退化成了一个向量

线性代数

当我们对两个矩阵相乘,我们得到的结果是

对应元素两两相乘的结果,例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> a
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
> a * a
     [,1] [,2] [,3]
[1,]    1   16   49
[2,]    4   25   64
[3,]    9   36   81

而这不是我们想要的矩阵乘法,在 R 中我们在乘法旁边加两个

百分号来做矩阵乘法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> a%*%a
     [,1] [,2] [,3]
[1,]   30   66  102
[2,]   36   81  126
[3,]   42   96  150

此外,我们可以用 t() 来求矩阵的转置 , 用 solve() 来求矩阵的逆。

数据框

数据框类似矩阵,与矩阵不同的是,数据框可以有不同的数据类型。

一般做数据分析,我们把一个类似 excel 的表格读入 R ,默认的格式

就是数据框 , 可见数据框是一个非常重要的数据结构。

一般来说我们需要分析的数据,每一行代表一个样本,每一列代表一个

变量。

下面我们用 R 内置的数据集 iris 来看一看数据框的使用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> data("iris")
> head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
> tail(iris)
    Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
145          6.7         3.3          5.7         2.5 virginica
146          6.7         3.0          5.2         2.3 virginica
147          6.3         2.5          5.0         1.9 virginica
148          6.5         3.0          5.2         2.0 virginica
149          6.2         3.4          5.4         2.3 virginica
150          5.9         3.0          5.1         1.8 virginica
> tail(iris, 20)
    Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
131          7.4         2.8          6.1         1.9 virginica
132          7.9         3.8          6.4         2.0 virginica
133          6.4         2.8          5.6         2.2 virginica
134          6.3         2.8          5.1         1.5 virginica
135          6.1         2.6          5.6         1.4 virginica
136          7.7         3.0          6.1         2.3 virginica
137          6.3         3.4          5.6         2.4 virginica
138          6.4         3.1          5.5         1.8 virginica
139          6.0         3.0          4.8         1.8 virginica
140          6.9         3.1          5.4         2.1 virginica
141          6.7         3.1          5.6         2.4 virginica
142          6.9         3.1          5.1         2.3 virginica
143          5.8         2.7          5.1         1.9 virginica
144          6.8         3.2          5.9         2.3 virginica
145          6.7         3.3          5.7         2.5 virginica
146          6.7         3.0          5.2         2.3 virginica
147          6.3         2.5          5.0         1.9 virginica
148          6.5         3.0          5.2         2.0 virginica
149          6.2         3.4          5.4         2.3 virginica
150          5.9         3.0          5.1         1.8 virginica

我们用 data 函数调入了 iris 这个数据集 , 然后用 head 函数来看一看这个数据

的前几行 , tail 函数来看一看这个数据

的后几行 可以看到有 sepal 的长度,宽度,petal 的长度和宽度,还有一个变量

Species 来描述样本的类别。

我们可以用 summary 函数来对数据集做大致的了解:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> sum
sum                 summary.Date        summary.POSIXlt     summary.connection  summary.default     summary.glm         summary.manova      summary.proc_time   summary.srcref      summary.table
summary             summary.POSIXct     summary.aov         summary.data.frame  summary.factor      summary.lm          summary.matrix      summary.srcfile     summary.stepfun     summaryRprof
> summary(iris)
  Sepal.Length    Sepal.Width     Petal.Length    Petal.Width
 Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100
 1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300
 Median :5.800   Median :3.000   Median :4.350   Median :1.300
 Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199
 3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800
 Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500
       Species
 setosa    :50
 versicolor:50
 virginica :50

可以直观地看到每个变量的信息,对于几个数值变量,我们可以看到最小值,中位数等等统计信息。而对于 Species 这个分类变量,我们看到的是计数信息。

筛选数据框与矩阵相似,都可以通过数字下标来获取子集,不同地是因为数据框有不同的列名,我们也可以通过列名来获取某一特定列,例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> iris$Species
  [1] setosa     setosa     setosa     setosa     setosa     setosa
  [7] setosa     setosa     setosa     setosa     setosa     setosa
 [13] setosa     setosa     setosa     setosa     setosa     setosa
 [19] setosa     setosa     setosa     setosa     setosa     setosa
 [25] setosa     setosa     setosa     setosa     setosa     setosa
 [31] setosa     setosa     setosa     setosa     setosa     setosa
 [37] setosa     setosa     setosa     setosa     setosa     setosa
 [43] setosa     setosa     setosa     setosa     setosa     setosa
 [49] setosa     setosa     versicolor versicolor versicolor versicolor
 [55] versicolor versicolor versicolor versicolor versicolor versicolor
 [61] versicolor versicolor versicolor versicolor versicolor versicolor
 [67] versicolor versicolor versicolor versicolor versicolor versicolor
 [73] versicolor versicolor versicolor versicolor versicolor versicolor
 [79] versicolor versicolor versicolor versicolor versicolor versicolor
 [85] versicolor versicolor versicolor versicolor versicolor versicolor
 [91] versicolor versicolor versicolor versicolor versicolor versicolor
 [97] versicolor versicolor versicolor versicolor virginica  virginica
[103] virginica  virginica  virginica  virginica  virginica  virginica
[109] virginica  virginica  virginica  virginica  virginica  virginica
[115] virginica  virginica  virginica  virginica  virginica  virginica
[121] virginica  virginica  virginica  virginica  virginica  virginica
[127] virginica  virginica  virginica  virginica  virginica  virginica
[133] virginica  virginica  virginica  virginica  virginica  virginica
[139] virginica  virginica  virginica  virginica  virginica  virginica
[145] virginica  virginica  virginica  virginica  virginica  virginica
Levels: setosa versicolor virginica

我们可以用 names() 函数来获取数据框的列名:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> names(iris)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"

并可以通过为其赋值改变列的名字。

列表

列表是一种递归式的向量,我们可以用列表来存储不同类型的数据,比如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> l <- list(name="youdi" , height=176 , weight = 67, man =  TRUE)
> l
$name
[1] "youdi"

$height
[1] 176

$weight
[1] 67

$man
[1] TRUE

列表有多种索引方式,可以用如下方式获取。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> l$name
[1] "youdi"
> l$height
[1] 176
> l$man
[1] TRUE
> l[1]
$name
[1] "youdi"

> l[[2]]
[1] 176
> l[['man']]
[1] TRUE

上面的内容涵盖了 R 语言最基本的数据结构.

R 语言学习优秀资源

网络资源

DataCamp : 一个提供云端R语言解释器的网站 ,提供了多门与数据科学有关的课程,可以借助此网站快速上手。

统计之都 : 国内质量最高的统计网站,有一些关于统计和R语言的优秀博客以及与R有关的会议通知。

肖凯博客(需访问外国网站): 很有质感的博客,有大量 R 语言应用的案例。

数据科学相关书籍

R for data science : 由 Hadley Wickham 合作编写的 2017 年出版的书籍 ,主要介绍的 tidyverse 生态 , tidyverse 中包括了 dplyr(用于数据处理) , ggplot(用于画图)等包,大幅增强了 R 语言的表现力 , 有免费的在线版本。

R 语言实战 : 一本从统计角度介绍 R 语言的书籍 ,较为简单 , 适合快速翻阅。

An Introduction to Statistical Learning : 斯坦福统计系几位教授出版的统计学习书籍,对统计学习进行了清晰细致的讲解 , 书有开源版本 ,并且在Stanford Lagunita上有配套课程

Machine Learning For Hackers : 使用机器学习解决问题的一本书 , 有很多有趣的案例 。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.10.04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
R语言快速入门:数据结构+生成数据+数据引用+读取外部数据
R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。常被用于统计学、计量分析等领域。接下来讲一下我个人认为的R入门知识。
1480
2019/08/23
1.9K0
R语言数据分析与挖掘(第一章):数据预处理(3)——数据整理
在介绍了缺失值处理的方法之后,我们可以得到完整的数据集,但在进行数据分析之前,还需要对数据进行整理,下面我们将介绍数据整理的相关知识。
DoubleHelix
2019/09/25
1.4K0
R-随笔-from homework
此次作业选择的是鸢尾花数据,因为可以从r语言预先设置的数据集中提取,所以读入数据这里我不做代码书写,不使用read.csv(),直接使用data()命令获得数据集 # 读入数据
火星娃统计
2020/09/15
2590
R-随笔-from homework
(数据科学学习手札19)R中基本统计分析技巧总结
在获取数据,并且完成数据的清洗之后,首要的事就是对整个数据集进行探索性的研究,这个过程中会利用到各种描述性统计量和推断性统计量来初探变量间和变量内部的基本关系,本篇笔者便基于R,对一些常用的数据探索方法进行总结: 1.描述性统计量部分 1.1 计算描述性统计量的常规方法 summary() summary()函数提供了最小值、最大值、四分位数和数值型变量的均值,以及因子向量和逻辑型向量的频数统计: > #挂载鸢尾花数据 > data(iris) > #计算鸢尾花各变量的基本描述统计量 > summary(
Feffery
2018/04/17
2.5K0
巧用R语言实现各种常用的数据输入与输出
将数据输入或加载到R工作空间中,是使用R进行数据分析的第一步。R语言支持读取众多格式的数据文件,excel文件,csv文件,txt文件和数据库(MYSQL数据库)等;其中,excel和csv是我们最常遇到的数据文件格式。
1480
2019/06/19
7.9K2
巧用R语言实现各种常用的数据输入与输出
R语言之缺失值处理
在实际的数据分析中,缺失数据是常常遇到的。缺失值(missing values)通常是由于没有收集到数据或者没有录入数据。
timerring
2023/10/13
7590
R语言之缺失值处理
R语言宏基因组学统计分析(第四章)笔记
citation("ggplo2")取包引用信息,RStudio.Version()可以获取RStudio引用信息。
用户1075469
2021/07/05
2K0
5R语言综合运用
y4 <- filter(deg, a>1 & b < 0.05);table(y4)
用户10556374
2023/05/18
2.4K0
Day-6 香波🐟
6.简单合并:在相当于base包里的cbind()函数和rbind()函数;注意,bind_rows()函数需要两个表格列数相同,而bind_cols()函数则需要两个数据框有相同的行数
波小囡
2023/12/02
2110
Day-6 香波🐟
快速掌握R语言中类SQL数据库操作技巧
在数据分析中,往往会遇到各种复杂的数据处理操作:分组、排序、过滤、转置、填充、移动、合并、分裂、去重、找重、填充等操作。这时候R语言就是一个很好的选择:R可以高效地、优雅地解决数据处理操作。(本章节为R语言入门第二部分总结篇:数据操作)
1480
2019/09/25
5.9K0
快速掌握R语言中类SQL数据库操作技巧
R Markdown
Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.
xiaoxiang学生信
2023/02/26
3760
【R语言进行数据挖掘】数据探索
这一章我们将会用到‘iris’(鸢尾花)数据集,这个数据集属于R中自带的数据,因此不需要额外的加载。首先,查看数据的维度和结构,使用函数dim()和names()可以分别得到数据的维度和数据的列表名称也就是变量名称。使用函数str()和函数attribute()可以查看数据的结构和属性。
Ai学习的老章
2019/04/10
9680
【R语言进行数据挖掘】数据探索
手把手教你学习R语言
随着分析数据的方式在近两年发生了翻天覆地的变化,随着互联网在人们的生活中广泛的普及,人手一部智能机的时代,人们的衣食住行都接上的互联网,这使得数据的获取量得以指数级的增长,数据的来源也丰富多彩,不在局限于商业大型公司和政府机构,我们普通的网民也可以轻松获得百万级的数据,而这些数据其中蕴含着丰富多彩的信息等着我们去挖掘,它就如同一个宝藏等带我们去开采,而那把锐利的斧子便是我们今天要讲的主角R。 你是否想要用R做机器学习,但又苦恼于怎么开始做? 在这篇文章里你将会用R完成你的第一个机器学习项目。 在这个逐步教程
小莹莹
2018/04/24
2.4K0
手把手教你学习R语言
R语言数据分析与挖掘(第四章):回归分析(4)——logistic回归
前面我们介绍的回归方法,一般适用于数值型数据对象,对于分类数据类型就不再适用。对于分类数据对象,我们需要引入广义线性回归方法,比如logistic回归和poisson回归模型。这里我们介绍logistic回归。
DoubleHelix
2019/12/13
13.9K0
R语言数据分析与挖掘(第四章):回归分析(4)——logistic回归
R语言专题2-数据框
生信汪一昂
2023/09/16
2530
Day6——R包的学习
菜单栏-Tools-Packages-Primary CRAN repository-选择国内镜像
掩扉先生
2023/10/25
2280
dplyr_下篇
Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.
火星娃统计
2020/09/15
7490
R语言之可视化(31)扫地僧easystats(2)相关性分析
相关性是一个专注于相关性分析的easystats软件包。 它轻巧,易于使用,并允许计算许多不同类型的相关性,例如偏相关性,贝叶斯相关性,多级相关性,或Sheperd的Pi相关性(鲁棒相关性的类型),距离相关(一种非线性相关性)等等,还允许它们之间进行组合(例如,贝叶斯局部多级相关性)。
用户1359560
2020/05/08
1.9K0
R语言 list与data.frame转换
背景:下载某数据库的数据做数据分析,发现下载的数据结构是多层list嵌套,与平时遇到的数据表(data.frame)不同,并且第二层list的名称是本人需要的变量。
拴小林
2022/04/18
3.2K0
R语言 list与data.frame转换
R语言 排序问题
解决R语言排序问题的方法: order from base arrange from dplyr setorder and setorderv from data.table arrange from plyr sort from taRifx orderBy from doBy sortData from Deducer Most of the time you should use the dplyr or data.table solutions, unless having no-dependen
用户1359560
2018/08/27
7380
相关推荐
R语言快速入门:数据结构+生成数据+数据引用+读取外部数据
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档