常规数据查看
数据抽取、抽样
数据赋值、增减变量
标准差
data(data) #加载数据集data head(data) #显示数据集data的前若干条数据 tail(data) #显示数据集data的后若干条数据 class(data) #查看对象类型 str(data) #探寻数据集内部结构 summary(data) #获取数据集data的概括信息 dim(data) #查看数据集data的纪录数和维度数 table(data$is_do) #查看数据集data中维度is_do的数值分布 nrow(data) #查看行数 ncol(data) #查看列数 length(data) #查看列数 #向量 length(a) #向量长度 mean(a) #求平均数 median(a) #求中位数 sort(a) #向量排序 var(a) #求方差 sd(a) #求标准差 quantile(x) #求百分位数 # quantile(x,probs = seq(0,1,0.25),na.rm = FALSE,names = TRUE,type = 7,...) # probs给出相应的百分位数,默认是0,1/4.1/2,3/4,1; # na.rm是逻辑变量,当ra.rm=TRUE时可以处理缺失数据的情况。 #向量与向量 cov(x$V1,x$V2) # 协方差 cor(x$V1,x$V2) # 相关系数
构建测试数据
tt<-attenu #存在缺失值 tt<-rbind(tt,tt[100:105,]) #构建重复值 tt[78,2]<-tt[79,3] #多列缺失值 tt[20,2]<-100 # 异常值
重复项处理
# 删除选定列重复项 ss<-tt[!duplicated(tt[,c(3)]),] # 删除全部列重复项 ss<-tt[!duplicated(tt, fromLast=F),] ss<-unique(tt,fromLast=FALSE) #fromLast=FALSE,即重复记录,保留首次出现的;否则取最后一次出现的异常值
dotchart(tt$mag) #观察 散点图 boxplot(tt$mag, horizontal = TRUE) #观察 散点图 ss<-tt[order(-tt$mag),]; head(ss) #观察 排序 ss<-tt[-which(tt$mag>50),] # 删除 异常值 tt$mag[tt$mag>50]<-NA # 替换异常值 ss<-tt; ss$mag[ss$mag>50]<-NA # 替换异常值为NA #其他:如果是多维度异常情况,思路是聚类技术等缺失值
# 描述 # 描述1 install.packages("mice") library(mice) md.pattern(tt) # 描述2 install.packages("VIM") library(VIM) aggr(tt,prop=T,number=T) #prop=T显示占比,prop=F显示数量 #number=T显示数值 # 缺失值处理 # 删除 指定列缺失值 ss<-tt[-which(is.na(tt$station)),] # 指定1列 ss<-tt[complete.cases(tt[,2:3]),] # 指定多列 # 删除 全部缺失值行 ss<-na.omit(tt) summary(ss) # 替换 mean(tt$station) # 均数 median(tt$station) # 中位数 table(ss$station)[table(ss$station)==max(table(ss$station))] # 众数 # 插补---等待学习 # 思路1、通过构建模型进行插补 # 思路2、通过各种可能性的插补值,然后分析对应的方向数据,通过评估进行选择 识别缺失数据的数目、分布和模式有两个目的: (1)分析生成缺失数据的潜在机制; (2)评价缺失数据对回答实质性问题的影响。 即: (1)缺失数据的比例有多大? (2)缺失数据是否集中在少数几个变量上,抑或广泛存在? (3)缺失是随机产生的吗? (4)缺失数据间的相关性或与可观测数据间的相关性,是否可以表明产生缺失值的机制呢? 若缺失数据集中在几个相对不太重要的变量上,则可以删除这些变量,然后再进行正常的数据分析; 深挖:缺失值的插补问题、缺失值缺失机制研究
格式转换
data$field<-as.numeric(data$field) #数值转换 data$field<-as.factor(data$field) #因子转化 for (i in 1:25) { data[,i] <- as.numeric(as.vector(data[,i])) } #循环技术进行各列数据类型转化
数据抽取、抽样
data<- data[which(data[,11]==1),] #选取data数据表里第11列维度为1的数据 data<-data[sample(nrow(data),10000),] #随机从数据集data中选取10000条纪录 number=sample(nrow(data),1/4*nrow(data)) #计算数据集data样本量1/4的数值 train_example=data[number,] #对数据集data随机抽样number个数 train_sub=sample(nrow(train_example),3/4*nrow(train_example)) train_data=train_example[train_sub,] test_data=train_example[-train_sub,] dim(train_data) dim(test_data)
数据赋值、增减变量
数据赋值、增减变量 y[which(y<1.5)] <- 1 data$is_do <- ifelse(data$is_do > 0.7 ,2,ifelse(data$is_do > 0.3 ,1,0)) q1_AGE<-quantile(data$AGE, 0.03,na.rm=TRUE) #data数据表中维度AGE从小到大排序前3%处数值 q2_AGE<-quantile(data$AGE, 0.97,na.rm=TRUE) #data数据表中维度AGE从小到大排序前97%处数值 data$AGE <- ifelse(data$AGE < q1_AGE,q1_AGE,data$AGE) data$AGE <- ifelse(data$AGE > q2_AGE,q2_AGE,data$AGE) data <- data[names(data) %in% c("CN_EFF_DATE", "CN_EXP_DATE")] #选取data数据表中字段CN_EFF_DATE、CN_EXP_DATE data <- data[!(names(data) %in% c("CN_EFF_DATE", "CN_EXP_DATE"))] #删除data数据表中字段CN_EFF_DATE、CN_EXP_DATE
数据重编码
方法1 leadership$age[leadership$age == 99] <- NA leadership$agecat[leadership$age > 75] <- "Elder" leadership$agecat[leadership$age >= 55 & leadership$age <= 75] <- "Middle Aged" leadership$agecat[leadership$age < 55] <- "Young" 方法2 leadership <- within(leadership,{ age[age==99] <-NA agecat[age > 75] <- "Elder" agecat[age >=55 & age <=75] <- "Middle Aged" agecat[age < 55] <- "Young" }) 方法3 age_new<-c() for (i in 1:length(data$AGE)){ if(data$AGE[i]>=0&data$AGE[i]<18) {age_new[i]<-'少年'} if(data$AGE[i]>=18&data$AGE[i]<30) {age_new[i]<-'青年'} if(data$AGE[i]>=30&data$AGE[i]<60) {age_new[i]<-'壮年'} if(data$AGE[i]>=60) {age_new[i]<-'老年'} }
数据0-1化处理
b1=(p[,1]-min(p[,1]))/(max(p[,1])-min(p[,1]))
标准差