使用過程中發現自己的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 存在,無窮大/無窮小
字符串
image.png
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