R 数据处理

常规数据查看
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]))  

标准差

猜你喜欢

转载自blog.csdn.net/scpcmoon/article/details/80523257