使用过程中发现自己的R语言基础太差了,回头补课。P15-P27
所学视频:
https://www.bilibili.com/video/BV19x411X7C6?p=31&spm_id_from=pageDriver
面向纯小白的R语言入门,我看过的最棒教材。授课老师平平无奇的东北口音、该死的幽默,扶我起来,我还可以再肝!
内置数据集
help(package='datasets')
data()#列出所有data
rivers
data('rivers')
help('mtcars')
state <-data.frame(state.name, state.abb,state.area,state.division,state.region)
data(package = 'MASS')#列出MASS包中的所有数据集
data(package = .packages(all.available = TRUE))# 列出所有的可用数据集
data(Chile,package = 'carData')#只加载数据集,不加载R包
Chile
数据结构
- R 数据类型
数值型、字符串型、逻辑型、日期型 - R 对象
指可以赋值给变量的任何事物
向量
- vector,是R中最重要的一个概念,构成其他数据结构的基础。用于存储数值型、字符型、逻辑型数据的一维数组
- R中加引号,表明外面人的身份
- 向量为同一类型
- 向量化编程,很方便。R精髓所在,避免使用循环。R是统计学软件。
向量索引
- 正整数索引【R中元素从1开始
- 负整数索引【除了这个元素的其他所有元素
- 逻辑判断
- 元素名称【比较麻烦,不太常见
#逻辑判断
y <- c(1:10)
y[c(T,F,T,T,T,T)]#循环判断
#超过个数,产生缺失值
y[y>5]
y[y>5 & y < 9]
z<- c('one','two','three','four','five')
'one' %in% z
z %in% c('one','two')
# 元素名称
y <- 1:5
names(y) <- c('one','two','three','four','five')
y
one two three four five
1 2 3 4 5
向量修改
v <- 1:3
v[c(4,5,6)] <- c(4,5,6)
v[20] <- 4
append(x= v, values = 99, after = 5)# 在第5个元素后面插入元素99
rm(v)
y <- y[-c(1:3)]# 负索引删除
向量运算
- 数学运算
- 逻辑判断
- 包含运算
x %in% y
#取整函数
ceiling()
floor()
trunc()
round()
signif()
#统计函数
sum()
max()
min()
range()
var()
range()
round()
sd()
prod()
median()
quantile()
#返回索引位置
t <- c(1,4,2,5,7,9,6)
which.max(t)
which(x == 7)
矩阵和数组
矩阵,matrix,按照长方阵列排列的复数/实数集合。
heatmap(state.x77)
x <- matrix(1:20,4,5)
m <- matrix(1:20,4,byrow = T)# 不加的话,默认按列排列
rnames <- c('r1','r2','r3','r4')
cnames <- c('c1','c2','c3','c4','c5')
dimnames(m) <- list(rnames,cnames)
dim(x) <- c(4,5)
#数组
x <- 1:20
dim(x) <- c(2,2,5)
?array
dim1 <- c('A1','A2')
dim2 <- c('B1','B2','B3')
dim3 <- c('C1','C2','C3','C4')
z <- array(1:24,c(2,3,4),dimnames = list(dim1,dim2,dim3))
z
矩阵索引、运算
m[i,j]
colSums()
rowSums()
colMeans()
rowMeans()
#内积,外积
diag(m)
t()#转置
列表
存储很多内容的一个集合。一些对象的有序集合,列表中可以存储若干向量、矩阵、数据框, 甚至其他列表的集合
- 索引
state.center
a <- 1:20
b <- matrix(1:20,4)
c <- mtcars
d <- 'this is test list'
mlist <- list(a,b,c,d)
names(mlist) <- c('one','two','three','four')
mlist$four
mlist[[1]]
mlist[1]
mlist[[2]] <- NULL# 清空
#也可以负索引
数据框
表格式的数据结构,与其他统计软件如SAS或SPSS中的数据集概念一致。数据集通常是由数据构成的矩形数组,行表示观测,列表示变量。
数据框实际上是列表,列表元素是向量,向量构成数据库的列。数据框列必须命名。
#一种方法
attach(mtcars) #加载数据框到R中,直接使用列名
mpg
detach(mtcars)
with(mtcars, {mpg})
因子
【R中很重要!】R中,名义型变量和有序型变量成为因子,factor。这些分类变量的可能值称为一个水平,level。由这些水平值构成的向量就称为因子。
名义型变量、有序型变量、连续型变量
table(mtcars$cyl)
week <- factor(c('Mon','Fri','Thu','Wed','Mon','Fri','Sun'),ordered = T, levels = c('Mon','Tue','Wed','Thu','Fri','Sat','Sun'))#有顺序了
week
fcyl <- factor(mtcars$cyl)
plot(mtcars$cyl) #散点图
plot(factor(mtcars$cyl))# 直方图
num <-1:100
cut(num,c(seq(0,100,10)))#连续型的也可以cut
缺失数据
NA代表缺失值,可以为任何值。缺失值会传染。
函数中,na.rm = TURE,忽略缺失值,将NA值移除,向量元素个数也相应减少。
is.na()
查看是否有NA
na.omit()
应用于数据框,则包含NA的整行都被删除
NA, 存在,不知道多少
NaN 不可能的值,不存在
Inf 存在,无穷大/无穷小
字符串
nchar()#统计字符串长度
month.name
length(month.name)
nchar(month.name)
paste(c('Everybody','loves','stats'),sep = '-')
substr(x = month.name,start = 1, stop = 3)
toupper()
tolower()
?sub
?gsub#全局替换
gsub('^(\\w)','\\U\\1',tolower(month.name),perl = T)
> gsub('^(\\w)','\\U\\1',tolower(month.name))
[1] "Ujanuary" "Ufebruary" "Umarch" "Uapril" "Umay"
[6] "Ujune" "Ujuly" "Uaugust" "Useptember" "Uoctober"
[11] "Unovember" "Udecember"
> gsub('^(\\w)','\\U\\1',tolower(month.name),perl = T)
[1] "January" "February" "March" "April" "May" "June"
[7] "July" "August" "September" "October" "November" "December"
> gsub('^(\\w)','\\L\\1',toupper(month.name),perl = T)
[1] "jANUARY" "fEBRUARY" "mARCH" "aPRIL" "mAY" "jUNE"
[7] "jULY" "aUGUST" "sEPTEMBER" "oCTOBER" "nOVEMBER" "dECEMBER"
> x <- c('b','A+','AC')
> grep('A+', x, fixed = T)#fixed 表示是否使用正则表达式
[1] 2
> grep('A+', x, fixed = F)
[1] 2 3
match() #类似于 %in%
strsplit()
path <- '/usr/local/bin/R'
strsplit(path,'/') #返回的是列表
?outer
face <- 1:13
suit <- c('spades','clubs','hearts','diamonds')
outer(suit,face, FUN = paste)
outer(suit,face, FUN = paste,sep = '-')#生成扑克牌
paste(suit,face)
[1] "spades 1" "clubs 2" "hearts 3" "diamonds 4" "spades 5"
[6] "clubs 6" "hearts 7" "diamonds 8" "spades 9" "clubs 10"
[11] "hearts 11" "diamonds 12" "spades 13"
stringr 包
时间序列分析
airmiles
Sys.Date()
a <- '2021-01-01'
as.Date(a, format = '%Y- %m- %d')
class(as.Date(a, format = '%Y- %m- %d'))
strftime()# 日期格式转换
seq(as.Date('2021-01-01'), as.Date('2021-02-01'),by = 5)
ts
sales <- round(runif(48,min = 50, max = 100))
ts(sales, start = c(2010,5),end = c(2014,4), frequency = 4)# 1, 按年;4按季度;12 ,按月份。没有按天的
Qtr1 Qtr2 Qtr3 Qtr4
2011 68 75 70 74
2012 52 85 70 59
2013 96 68 96 76
2014 60 63 60 70
> ts(sales, start = c(2010,5),end = c(2014,4), frequency = 1)
Time Series:
Start = 2014
End = 2017
Frequency = 1
[1] 68 75 70 74
解决R错误
Google Rblogger,quickR,stackoverflow