title: "r basical"
author: "wy"
date: "2018/7/22"
output: html_document
未完,待续...
R数据结构:
对像的5种基本属性:
字符(characte)
数值(numeric:real numbers)
整数(integer)
复数(complex):1+2i
逻辑(logical:TRUE/False)
class( )为查看数据类型的函数
y <- "hallo word"表示字符型(character)
名称属性:
名称 (name)
维度 (dimensions:matrix,array)
类型(class)
长度(length)
数据结构:
向量(vetocr):只能包含同一类型的对象。
创建函数的vector的方法:
x<- vector("character",length=10) > x1<-1:4 > x2<-c(1,2,3,4)
例子:
x3<- c(TRUE,10,"a")表示字符型
x3<- c(TRUE,10,"a") > class(x3) [1] "character"
as.numeric(x3) [1] NA 10 NA
Warning message:强制改变过程中产生了NA
x3<- c(TRUE,10,"a")class(x3) [1] "character" as.numeric(x3) [1] NA 10 NA
Warning message:强制改变过程中产生了NA其他强制转换的函数:as.character()/as.logical()
names函数
x1<- 1:4 names(x1)<-c("a","b","c","d")
数据结构总结:
向量(vector):只能包含同一类型的对像
创建向量:
vector()
c() 说明:使用c()函数,如果其中一个元素是字符,则非字符值强制为字符类型。
as.logical()/as.numeric()/as.character()
矩阵(matrix)
向量+维度属性(整数向量:nrow行,ncol列)
x<-matrix(nrow = 3,ncol = 2)
matrix()至少需要传入两个参数:nrow()/ncol(),那么改矩阵未被赋值,就会以缺失值NA代替
x<- matrix(1:6,nrow = 2,ncol = 3)
也可简写为:x<- matrix (1:6,2,3)
矩阵是先填充列
dim()表示矩阵的维度属性
dim(x)
attributes()用来查找矩阵有多少属性,有哪些属性
矩阵就是向量+维度:
y<-1:6dim(y)<-c(2,3)
拼接矩阵
y2<- matrix(1:6,nrow = 2,ncol = 3)
rbind(y,y2)
表示合并行nrowcbind(y,y2)
列拼接
数组array
与矩阵类似,但是维度可以大于2
x<-array(1:24,dim = c(4,6)) x1<-array(1:24,dim = c(2,3,4))
表示有3个维度,有4个2行3列
列表(list)
可以包含不同类型的对像(与向量vector区别)
矩阵和数组可以包含很多元素,但是多个元素之间必须是一致的。
l<-list("a",2,10L,3+4i,TRUE) l2<-list(a=1,b=2,c=3) l3<-list(c(1,2,3),c(4,5,6,7))
矩阵赋名
x<-matrix(1:6,nrow = 2,ncol = 3) dimnames(x)<-list(c("a","b"),c("c","d","e")) dimnames(x)<-list(c("a","b"),c("c","d","e","f"))
Error in dimnames(x) <- list(c("a", "b"), c("c", "d", "e", "f")) : 'dimnames'的长度[2]必需与陈列范围相等
因子(factor)
因子用来处理 分类数据(分为)有序 vs.无序
因子=整数向量+标签(label)(优于整数向量)
无序:Male/Female vs.有序:1/2
常用与lm(),glm()
创建因子(factor)
x<-factor(c("female","man","female"))
运行如下:
x[1] female man female
Levels: female man (levels就是标签?此处是以female为基线)
y<-factor(c("female","man","female"),levels = c("man","female"))
运行结果如下:
y[1] female man female
Levels: man female(那么此处就是以man为基线)
可通过levels来设置factor中的基线水平
可使用table函数对感兴趣的factor进行了解:
table(y) y man female 1 2
因子=整数向量+标签(label)
levels为factor的一个属性,可以用unclass去除factor的属性
unclass(x)
运行如下:
unclass(x)[1] 1 2 1
attr(,"levels") 曾经的属性为levels,有两个水平(female,male)
[1] "female" "man" class(unclass(x))
缺失值(missng value)
NA/NaN:NaN属于NA,NA不属于NaN
NaN一般用于表示数值的缺失
NA可表示数值、字符型
NA有类型属性存在:integer NA,character NA等
is.na()/is.nan()
用来判断一个向量中是否存在缺失值example:
x<-c(1,NA,2,NA,3)
is.na(x) [1] FALSE TRUE FALSE TRUE FALSEis.nan(x) [1] FALSE FALSE FALSE FALSE FALSE
试着将x<-c(1,NA,2,NA,3)改为x<-c(1,NaN,2,NaN,3)
数据框(data frame)
用来存储表格数据(tabular data)
视为各元素长度相同的列表:
每个远元素代表一列数据
每个元素的长度代表行数
元素类型可以不用
df<-data.frame(id=c(1,2,3,4),name=c("a","b","c","d"),gender= c(TRUE,FALSE,FALSE,TRUE))
nrow(df)/ncol(df)查看数据框有多少行/列
dfid name gender1 1 a TRUE2 2 b FALSE3 3 c FALSE4 4 d TRUE
也可nrow(df)/ncol(df)用来查看行/列
区别矩阵:每行每列元素需要一样,但两者结构相似
df<-list(id=c(1,2,3,4),name=c("a","b","c","d"),gender= c(TRUE,FALSE,FALSE,TRUE))
运行如下:
>df $id [1] 1 2 3 4 $name [1] "a" "b" "c" "d" $gender [1] TRUE FALSE FALSE TRUE
df2<-data.matrix(id=c(1,2,3,4),name=c("a","b","c","d"),gender= c(TRUE,FALSE,FALSE,TRUE))
运行如下:
Error in data.matrix(id = c(1, 2, 3, 4), name = c("a", "b", "c", "d")
参数没有用(id = c(1, 2, 3, 4), name = c("a", "b", "c", "d"), gender = c(TRUE, FALSE, FALSE, TRUE))
df3<-data.frame(id=c(1,2,3,4),score=c(80,86,90,100))
运行如下:
df3id score1 1 802 2 863 3 904 4 100
data.matrix(df3)转换为矩阵
data.matrix(df3)id score[1,] 1 80[2,] 2 86[3,] 3 90[4,] 4 100
处理缺失值NA
x <- c(1,NA,2,NA,3)is.na(x) x[is.na(x)] x[!is.na(x)]
complete.cases选取x,y中都不是NA中的缺失值NA,返回值为逻辑(TRUE,FALSE)
x <- c(1,NA,2,NA,3)y<- c("a","b",NA,"c",NA)z<- complete.cases(x,y)x[z]y[z]head(airquality)complete.cases(airquality)g<-complete.cases(airquality)airquality[g,][1:10,]
运行查看各个代码的意义。
向量化操作:
可用于vector、matrix等结构操作,使代码简单已读、易于操作。
x<-1:5 y<-6:10 x+y x/y
x<-matrix(1:4,nrow = 2,ncol = 2) y<-matrix(rep(2,4),nrow =2,ncol=2) x*y x/y
x%*%y矩阵乘
重要函数的使用
目录为:
处理循环:r不仅有for/while循环函数,还有一句话循环函数
排序
总结数据信息
lapply
可以循环处理列表中的每一个元素
lapply(参数):lapply(列表,函数/函数名,其他参数)
str(lapply)
x<- list(a=1:10,b=c(11,21,31,41,51))lapply(x,mean)sapply(x,mean)
lapply(x,runif) lapply(x,runif,min=0,max=100)
runif函数表示为随机抽取向量,默认的范围为0-1
lapply()函数通常传入为list,在上个函数中
lapply(x,runif)
中的x为一个vector,这样lapply通常会将其强制转化为list
apply
沿着数组的某一维度处理数据
例如:将函数用于矩阵的行和列
虽然与for/while循环的效率相似,但是只用一句话就可以完成
apply(参数):apply(数组,维度,函数/函数名)
x<- matrix(1:16,4,4)apply (x,2,mean)apply(x,1,mean)
分别运行产生一下代码:
> x [,1] [,2] [,3] [,4][1,] 1 5 9 13[2,] 2 6 10 14[3,] 3 7 11 15[4,] 4 8 12 16 > apply (x,2,mean)[1] 2.5 6.5 10.5 14.5> apply(x,1,mean)[1] 7 8 9 10
apply
沿着数组的某一维度处理数据
例如:将函数用于矩阵的行和列
虽然与for/while循环的效率相似,但是只用一句话就可以完成
apply(参数):apply(数组,维度,函数/函数名)
x<- matrix(1:16,4,4)apply (x,2,mean)apply(x,1,mean)
分别运行产生一下代码:
> x [,1] [,2] [,3] [,4][1,] 1 5 9 13[2,] 2 6 10 14[3,] 3 7 11 15[4,] 4 8 12 16 > apply (x,2,mean)[1] 2.5 6.5 10.5 14.5> apply(x,1,mean)][1,] -0.6843901 0.1666006 0.6803454[2,] 1.1253118 0.4653100 0.1141857> apply(x,c(1,3),mean) [,1] [,2] [,3] [,4][1,] 1.2045748 -1.53831670 0.3211516 0.2293316[2,] 0.8996401 0.09853166 1.1504825 0.1244224> apply(x,c(2,3),mean) [,1] [,2] [,3] [,4][1,] 0.7023668 -1.4052478 0.6801564 0.90456808[2,] 1.6055750 -1.0393436 0.7949597 -0.09736984[3,] 0.8483805 0.2849139 0.7323351 -0.27656733
mapply:
lappy的多元版本
mapply(参数),mapply(函数/函数名,数据,函数相关参数)
list(rep(1,4),rep(2,3),rep(3,2),rep(4,1))[[1]][1] 1 1 1 1[[2]][1] 2 2 2[[3]][1] 3 3[[4]][1] 4
用mapply完成上面
mapply(rep,1:4,4:1)
自创函数s:
s<- function(n,mean,std)
这个函数中,function用来说明这是一个函数,()中传入需要传入的参数
n这里代表从正太分布中随你抽取n个数,mean表示整体分布的均值,std代表这个整体的标准差。
s<- function(n,mean,std){rnorm(n,mean,std)} s(4,0,1) mapply(s,1:5,5:1,2)
运行如下:
> mapply(s,1:5,5:1,2)[[1]][1] 1.938297[[2]][1] 4.455111 4.432794[[3]][1] 1.118224 3.751297 5.864922[[4]][1] 4.1675629 1.7385185 0.8987198 0.1048540[[5]][1] -0.3413274 1.2058371 -0.5148753 1.9476646 3.9251892
如果用list表示上面这个则为:
list(s(1,5,2),s(2,4,2),s(3,3,2)...)
tapply
对向量的子集进行操作
tapply(参数):tapply(向量,因子/因子列表,函数/函数名)
x<- c(rnorm(5),runif(5),rnorm(5,1)) f<-gl(3,5)
gl函数:?gl可自行查看以下
rnorm表示正太分布,runif表示均匀分布。
> rnormfunction (n, mean = 0, sd = 1) >runifrunif(n, min = 0, max = 1)
tapply(x,f,mean) 1 2 3 0.08431157 0.36912987 0.92869525
split
根据因子或因子列表将向量或其他对像分组
通常与lapply一起运用
split(参数):split(向量/列表/数据框,因子/因子列表)
split(x,f) lapply(split(x,f),mean)
排序
sort:对向量进行排序,返回排好序的内容
order:返回排好序的内容的下标/多个排序标准
wy<-data.frame(v1=1:5,v2=c(10,7,9,6,8),v3=11:15,v4=c(1,1,2,2,1)) sort(wy$v2) [1] 6 7 8 9 10sort(wy$v2,decreasing=TRUE) [1] 10 9 8 7 6
order(wy$v2) [1] 4 2 5 3 1 wy[order(wy$v2),] v1 v2 v3 v4 4 4 6 14 2 2 2 7 12 1 5 5 8 15 1 3 3 9 13 2 1 1 10 11 1
wy[order(wy$v4,wy$v2),] v1 v2 v3 v4 2 2 7 12 1 5 5 8 15 1 1 1 10 11 1 4 4 6 14 2 3 3 9 13 2 wy[order(wy$v2,wy$v4),] v1 v2 v3 v4 4 4 6 14 2 2 2 7 12 1 5 5 8 15 1 3 3 9 13 2 1 1 10 11 1
作者:泥人吴
链接:https://www.jianshu.com/p/45cef8da32ba
共同学习,写下你的评论
评论加载中...
作者其他优质文章