数据框、因子、缺失数据

数据框

iris#数据框是R中最常用最重要的数据结构,数据框是表格式的数据结构
mtcars#数据框本质上是列表,列表中的元素长度必须一样
rock#数据框形状上像是矩阵,是比较规则的列表,矩阵必须为同一数据类型
state <- data.frame(state.name,state.abb,state.region,state.x77)
state[1]#输出第1列
state[c(2,4)]#输出第2到4列
state[,"state.abb"]#用列名直接输出某一个列
state["Alabama",]#用行名直接输出某一个列
women$height#使用$,直接访问某一个数值
plot(women$height,women$weight)
lm (weights~height,data = women)
attach(mtcars)#加载数据框到R搜索目录中
mpg#使用attach过后就可以直接使用列的名字来找到这一列
hp
detach(mtcars)#取消加载
with(mtcars,{mpg})#同样也是加载某一列到目录当中

因子

#R中变量可以分为名义型变量(没有顺序)
#有序型变量(good better best)和连续型变量(数字)
#在R中,名义型变量和有序性变量称为因子,因子的最大作用是分类
#GDP100强城市中,省份这一列就算作一个因子
mtcars$cyl#汽缸数量
table(mtcars$cyl)#使用table统计汽缸数量,这里把cyl一列作为因子类型
#cyl的level是468
f <- factor(c("red","red","green","red","blue","green","blue","blue"))
#使用factor,生成一个因子类型的数据
week <- factor(c("Mon","Fri","Thu","Wed","Mon","Fri","Sun"))
#[1] Mon Fri Thu Wed Mon Fri Sun(输出因子本身)
#Levels: Fri Mon Sun Thu Wed(输出因子的level)
week <- factor(c("Mon","Fri","Thu","Wed","Mon","Fri","Sun"),order = TRUE,
               levels = c("Mon","Tue","Wed","Thu","Fri","Sat","Sun"))
#这里加上order,让其值等于true,然后给出因子的水平
fcyl <- factor(mtcars$cyl)#生成一个因子
plot(mtcars$cyl)#向量输出散点图
plot(factor(mtcars$cyl))#因子输出条形图
num <- 1:100
cut (num,c(seq(0,100,10)))#将连续变量X分割为N个因子,这里分出了10个level
state.division#这两个数据都是因子类型
state.region

缺失数据

x <- 1:5
x[10] <- 100#生成第10个值,那么6到9就是NA(not available)
x
1+NA
NA==0#逻辑值测试NA
a <- c(NA,1:49)
sum(a)#只要有缺失值出现的地方都返回NA
mean(a)
sum(a,na.rm = TRUE)#这里表示跳过缺失值
mean(a,na.rm = TRUE)
mean(1:49)
install.packages("VIM")
library(VIM)
is.na(sleep)#sleep数据集中有许多的NA值
#is.na用于判断是否为NA,是则为TRUE,否则为FALSE
colSums(is.na(sleep))#使用col函数看这一列当中有多少NA值
rowSums(is.na(sleep))
c <- c(NA,1:20,NA,NA)#定义一个有缺失值的向量
d <- na.omit(c)#省略掉其中的缺失值
na.omit(sleep)#使用omit处理向量会删除某个元素,处理数据框则会删除
#含有缺失值的行
#R中的NaN表示不可能的数Inf表示无穷
#法二,使用complete.cases函数出去缺失值
p <- c(1,NA,3,NA)
q <- c("a","b",NA,"d")
complete.cases(p,q)#识别p和q这个DF在每一列有没有缺失值
p[complete.cases(p)]#只返回T值,不返回F值
q[complete.cases(p,q)]
complete.cases(sleep)
sleep[complete.cases(sleep),]
1/0
-1/0
0/0
is.nan(0/0)#识别某一个值是不是不可能值
#NA是存在的值,但不知道是多少;NaN是不存在的值,如0/0
is.infinite(1/0)
#Inf存在,但是表示不可能的值,如∞或-∞,1/0