R语言之基础

Python012

R语言之基础,第1张

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

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

R的下标是从1开始的,和python等不同(python四从0开始的)

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

负数下标表示不选这个这些下标,例如:

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

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

a 自动变成了 c(3,4,3,4) 然后与b相加 , 得到了下面的结果。

遇到不懂得函数,可以用help("函数")查看函数用法。

矩阵,从本质上来说就是多维的向量,我们来看一看 我们如何新建一个矩阵。

可以看到向量元素变为矩阵元素的方式是按列的,从第一列 到第二列,如果我们想按行输入元素,那么需要加入 byrow = TRUE 的参数:

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

a[行,列]

当我们对两个矩阵相乘,我们得到的结果是 对应元素两两相乘的结果,例如:

而这不是我们想要的矩阵乘法,在 R 中我们在乘法旁边加两个 百分号来做矩阵乘法:

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

数据框类似矩阵,与矩阵不同的是,数据框可以有不同的数据类型。 一般做数据分析,我们把一个类似 excel 的表格读入 R ,默认的格式 就是数据框 , 可见数据框是一个非常重要的数据结构。

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

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

我们用 data 函数调入了 iris 这个数据集 , 然后用 head 函数来看一看这个数据 的前几行 , 可以看到有 sepal 的长度,宽度,petal 的长度和宽度,还有一个变量 Species 来描述样本的类别。

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

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

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

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

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

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

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

今天我们实验的对象就是一组从原始 R 进化出来的工具链 Tidyverse , 它是由 Hadley Wickham 主导开发的一系列 R 包的集合。 Tidyverse 继承了R语言进行快速统计分析的优势 , 并实现了一些新的理念 , 例如 magrittr 包中的管道操作 , 让线性嵌套的函数组合变得更加清晰易懂;可视化方面中的 ggplot ,使绘图变成搭积木式的图层叠加。

这样的小发明有的改变了分析的运作方式 , 有的改变了使用者的认知方式 , 聚在一起形成了一种新的数据分析的生态链 。具体来看 , Tidyverse 有如下核心组件:

mpg 数据集是刻画不同汽车的排放状况的一个数据集, 总过有 234 个样本 , 11 个变量 。 这 11 个变量分别是:

manufacture: 制造商

model: 车型

dispel: 汽车排放量

year: 制造年度

cyl: 排气管数量

trans: 排放类型

drv: 驱动方式

cty: 每公里耗油量(城市道路)

hwy: 每公里耗油量(高速路)

fl: 油的种类

class: 车的类型

更多数据相关信息可以通过 help(mpg) 指令获取。

在属性映射中加入 color=class 参数后 , 我们可以看到每个点的汽车对应的类型被用 不同颜色表现了出来 , 对于散点图 , 还有 size(大小) , shape(形状) 等等参数 可以用于确定点的属性。

对于条形图的y轴就是数据框中原本的数值时,必须将geom_bar()函数中stat(统计转换)参数设置为’identity’,即对原始数据集不作任何统计变换,而该参数的默认值为’count’,即观测数量。

Sys.Date( ) returns today's date.

date() returns the current date and time.

# print today's date

today <-Sys.Date()

format(today, format="%B %d %Y")

"June 20 2007"

# convert date info in format 'mm/dd/yyyy'

strDates <- c("01/05/1965", "08/16/1975")

dates <- as.Date(strDates, "%m/%d/%Y")

# convert dates to character data

strDates <- as.character(dates)

--------------------------------------

>as.Date('1915-6-16')

[1] "1915-06-16"

>as.Date('1990/02/17')

[1] "1990-02-17"

>as.Date('1/15/2001',format='%m/%d/%Y')

[1] "2001-01-15"

>as.Date('April 26, 2001',format='%B %d, %Y')

[1] "2001-04-26"

>as.Date('22JUN01',format='%d%b%y') # %y is system-specificuse with caution

[1] "2001-06-22"

>bdays = c(tukey=as.Date('1915-06-16'),fisher=as.Date('1890-02-17'),

+ cramer=as.Date('1893-09-25'), kendall=as.Date('1907-09-06'))

>weekdays(bdays)

tukey fisher cramer kendall

"Wednesday""Monday""Monday""Friday"

>dtimes = c("2002-06-09 12:45:40","2003-01-29 09:30:40",

+"2002-09-04 16:45:40","2002-11-13 20:00:40",

+"2002-07-07 17:30:40")

>dtparts = t(as.data.frame(strsplit(dtimes,' ')))

>row.names(dtparts) = NULL

>thetimes = chron(dates=dtparts[,1],times=dtparts[,2],

+ format=c('y-m-d','h:m:s'))

>thetimes

[1] (02-06-09 12:45:40) (03-01-29 09:30:40) (02-09-04 16:45:40)

[4] (02-11-13 20:00:40) (02-07-07 17:30:40)

>dts = c("2005-10-21 18:47:22","2005-12-24 16:39:58",

+ "2005-10-28 07:30:05 PDT")

>as.POSIXlt(dts)

[1] "2005-10-21 18:47:22" "2005-12-24 16:39:58"

[3] "2005-10-28 07:30:05"

>dts = c(1127056501,1104295502,1129233601,1113547501,

+ 1119826801,1132519502,1125298801,1113289201)

>mydates = dts

>class(mydates) = c('POSIXt','POSIXct')

>mydates

[1] "2005-09-18 08:15:01 PDT" "2004-12-28 20:45:02 PST"

[3] "2005-10-13 13:00:01 PDT" "2005-04-14 23:45:01 PDT"

[5] "2005-06-26 16:00:01 PDT" "2005-11-20 12:45:02 PST"

[7] "2005-08-29 00:00:01 PDT" "2005-04-12 00:00:01 PDT"

>mydate = strptime('16/Oct/2005:07:51:00',format='%d/%b/%Y:%H:%M:%S')

[1] "2005-10-16 07:51:00"

>ISOdate(2005,10,21,18,47,22,tz="PDT")

[1] "2005-10-21 18:47:22 PDT"

>thedate = ISOdate(2005,10,21,18,47,22,tz="PDT")

>format(thedate,'%A, %B %d, %Y %H:%M:%S')

[1] "Friday, October 21, 2005 18:47:22"

>mydate = as.POSIXlt('2005-4-19 7:01:00')

>names(mydate)

[1] "sec" "min" "hour" "mday" "mon" "year"

[7] "wday" "yday" "isdst"

>mydate$mday

[1] 19