【R語言入門與數據分析-1】 R 基礎變量類型

使用過程中發現自己的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

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容