数据类型:一个变量内元素取值的类型。主要包括:数值型、字符型、逻辑型、复数型。
对象类型:R语言组织和管理内部元素的不同方式。主要包括:向量、矩阵、数组、列表、数据框、因子、时间序列。
数据类型我们简单介绍一下。
数值型:取值是实数,在R语言环境中常用数字来表示。
复数型:取值可以扩展到虚数。
逻辑型:取值为TRUE(T)或者FLASE(F)。
字符型:取值是字符串。
#数值型
a<-9.11
mode(a)
#复数型
a<-9.11+9.11i
mode(a)
#字符型
a<-'9.11'
mode(a)
#逻辑型
a<-T
mode(a)
但是要注意有两种情况不能用上述4种数据类型来描述,分别是数据的缺失(NA)和数据的未知状态(NULL)。
NA:占据数据空间,参与运算
NULL:不占据任何数据空间
x<-c(10,20,30,40,NA)
mean(x)
mean(x,na.rm = T)
length(x)
y<-c(10,20,30,40,NULL)
mean(y)
length(y)
怎么去判别NA和NULL呢?
is.na:R语言中向量下标的第一个元素为1,若有NA,返回对应的TRUE,否则是FLASE
is.null:在处理向量时不会分别判断内部数据,而是把向量当作一个数据统一判断,其返回值只有一个FLASE。
x<-c(10,20,30,40,NA)
y<-c(10,20,30,40,NULL)
is.na(x)
is.null(y)
下面我们主要阐述R语言中的对象类型。
R语言中使用属性来辅助描述每个对象信息,固有属性:模式(mode)和长度(length)。了解其余属性,可以借助与attributes()和attr()函数。
df<-data.frame(a=c(1:10),b=sample(c('F','M'),size=10,replace=T))
attributes(df)#展示列名、行名、数据类型
attr(df,'names')#展示自己想要的结果(列名、行名、数据类型)
attr(df,"names")[1]<-'new_name'#重命名列名
attr(df,"row.names")<-LETTERS[1:10]#可以重命名行名
df
向量
向量索引
# 创建向量
x<-1:10
y<-c('F','M','F','M','T','F')
z<-c(T,F,F,F,T)
R语言中利用c()来创建向量,向量内各元素使用逗号分割。这是非常简单的,相信大家都已经掌握的非常熟练了。
那么我们简单回忆一下向量的索引有几种方法?
ToothGrowth#数据集
ToothGrowth[1]#下标索引
ToothGrowth['len']#名字索引
ToothGrowth[,c(T,F,F)]#T/F索引
split(ToothGrowth$len,f = ToothGrowth$supp)#split分割(利用正则表达式)
ToothGrowth[which(names(ToothGrowth)=="len")]#which索引
a<-c(11,12,13,14)
a[which(a>12)]#which返回的是元素下标
a[which.min(a)]
a[which.max(a)]
subset(ToothGrowth,select = 1)#subset索引
subset(ToothGrowth,select = c(T,F,F))
subset(ToothGrowth,select='len')
ToothGrowth[grep(pattern = 'len',x = names(ToothGrowth))]#grep索引
b<-c(11,12,13,14,15,16,17,18,19,20)
c(11,21) %in% b # %in%索引
d<-c(11,21)
match(d,b)#match索引
其实还有很多方式可以帮助我们定位向量中每个元素,读者可以自己思考一下。另外由于篇幅有限,读者可以将上面代码复制后在自己R编译器上运行,这里就不在展示结果了。
向量编辑
a<-c(1:10)
b<-letters[1:10]
a<-c(a,b)# 向量扩展
a
向量中元素的删除
a<-c(1:10)
b<-letters[1:10]
a<-c(a,b)
a[-c(5:9)]#删除多个向量
向量中元素的排序
a<-c(10:1,11:20)
sort(a)
rev(a)
rev(sort(a))
请读者注意区分上述三种排序方式的差异!
向量去重
a<-c(1:10,5:15,10:20)
a
unique(a)
as.numeric(names(table(a)))
向量中缺失值的处理
a<-c(NA,NA,1,5,6,8,7,9)
a[!is.na(a)]
na.omit(a)
na.fail(data.frame(a))#判断数据框中有没有缺失值
na.fail(na.omit(a))
向量大小比较
a<-c(3,7,8,5,4,2,5)
b<-c(4,7,8,9,5,7,5)
c<-c(8,7,5,4,8,5,7)
pmin(a,b,c)
pmax(a,b,c)
pmin:以此比较向量abc对应元素,并把较小的元素组成新的向量。
pmax:则是把较大的元素组成新的向量。
向量的交集、并集、补集
intersect(a,b):返回既属于a,又属于b的元素组成的向量------->交集
union(a,b):把a、b中所有元素组成一个新的向量-------->并集
setdiff(a,b):返回既不属于a,也不属于b的元素组成的新的向量----->补集
a<-c(3,7,8,5,4,2,5)
b<-c(4,7,8,9,5,7,5)
intersect(a,b)
union(a,b)
setdiff(a,b)