【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

你可能感兴趣的:(【R语言入门与数据分析-1】 R 基础变量类型)