在数据分析中,数据整理需要一些步骤,将长剑的数据整理需要的功能整理一下,并给出相应的代码,便于以后数据处理的参考和回忆
数据整合
01.拼接:
cbind--横向追加
cbind 将参数按列合并,
使用前保证参数的行数相同--如不相同也不报错--自动填补-注意!!!
比较耗时--循环中注意
rbind--纵向追加
merge
具体解释:
merge(x, y, by = intersect(names(x), names(y)), by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,
sort = TRUE, suffixes = c(".x",".y"),incomparables = NULL, ...)
单变量匹配:
类似sql里面的inner join 功能,则用代码
m1 <- merge(authors, books, by.x = "surname", by.y = "name")
left join功能则用代码
m1 <- merge(authors, books, by.x = "surname", by.y = "name",all.x=TRUE)
right join功能代码
m1 <- merge(authors, books, by.x = "surname", by.y = "name",all.y=TRUE)
all join功能代码
m1 <- merge(authors, books, by.x = "surname", by.y = "name",all=TRUE)
多变量匹配
merge(x, y, by = c("k1","k2"))
02.抽取-筛选--移除:
001.行抽取--位置索引--条件索引
any() -----------all()
which
##空值-空值-缺失值
###数据查看--识别是否有空值--因为来自其他数据源,所以对空值的检查和只在R语言中的有所不同
##########哪些变量有缺失值,数目是多少,什么样的组合形式
##########缺失数据所占比例多大,集中在哪些变量中或者是广泛存在的?
##########是随机产生的吗?缺失数据间的相关性以及与可观测数据间的相关性,是够可以表明产生缺失的机制
which(is.na(Data$数目)) ##识别缺失值
which(is.nan(Data$数目)) ##识别不可能值
which(is.null(Data$数目))
which(is.infinite(Data$数目)) ##识别无穷值 Inf 和-Inf
which(Data$数目=="NULL")
which(Data$数目=="null")
抽样 软件包 函数 函数意义
base(无需加载,默认含有) sample() 简单随机抽样
sampling(需下载) stratr() 分层抽样
cluster() 整群抽样
简单随机抽样
sample(x, size, replace = FALSE, prob =NULL)
x: 带抽取对象
size: 想要抽取的样本数量
replace: 是否为有放回,默认为FALSE,即无放回
prob: 设置个抽取样本的抽样概率,默认为无取值,即等概率抽样
分层抽样
strata(data, stratanames=NULL, size, method=c
("srswor","srswr","poisson","systematic"),pik,description=FALSE)
data: 带抽样数据
stratanames: 进行分层所依据的变量名称
size: 各层中要抽出的观测样本数
method: 选择4中抽样方法,分别为无放回、有放回、泊松、系统抽样,默认为srswor
pik: 设置各层中样本的抽样概率
description: 选择是否输出含有各层基本信息的结果
install.packages("sampling")
library(sampling)
train_sub <- strata(featureData, stratanames=" Y.i.",size=c(1,2),method="srswor")
002.列抽取-名称索引--位置索引--条件索引
subset --可用于行以及列---条件查询<对列中数据进行逻辑判断>+指定显示列<选定列或者移除列>
subset(x, subset, select, drop = FALSE, ...)
subset(data01, Temp > 80, select = c(Ozone, Temp))
match()----
003.集合运算
union
intersect(as.vector(agroup[,1]),as.vector(as.matrix(anumbers)))
setdiff(as.vector(as.matrix(anumbers)),as.vector(agroup[,1]))
setdiff(as.vector(agroup[,1]),as.vector(as.matrix(anumbers)))
setequal( , ) 检验集合是否相等
数据填充
##vector创建空的向量创建--填充--添加--移除
a <- c()
vec <- rep(1:3,2) ##冒号运算符,重复次数
append(vec,seq(2,33,2))
tt <- append(vec,seq(1,32,2))
seq(from=1,to=5,by=2) ##序列sequence ==区分separate
##matrix-创建空的矩阵--创建--填充--添加--移除
##数组
##具有维度属性-dim()
tt3 <- matrix(vec,2,3) ##两行三列
matrix(vec,2,3,byrow = TRUE) #默认是按行填充
matrix(vec,2,3,byrow = FALSE) #按列填充
tt3[,1,drop=T]
tt3[,1,drop=F]
array()
##data.frame-创建空的数据框--创建--填充--添加--移除
dfr <- data.frame(tt,tt2,stringsAsFactors = F)
dfr
na.omit(dfr)
str(dfr[,1])
str(dfr[,1,drop=FALSE])
str(dfr[,2])
str(dfr[,2,drop=FALSE])
##在提取dataframe的行或者列的时候,通过设置,
##drop=FALSE可以放置提取的行或者列变为向量结构,保持dataframe结果。
#data.frame(colname1 =numeric(n), colname2 = character(n))
数据框删除一列
data$det <- NULL 或者采取 subset(data,select =(-det)),删除两列subset(data,select =c(-det,-det2))
##list-列表----创建--填充--添加--移除
##创建空列表,然后对列表进行数据添加
a <- rep(0:9)
K <- length(a)
lst <- list(NULL)
length(lst) <- 2*(K-1)
i <- 1
j <- 1
repeat{
lst[[j]] <- c(a[0:i])
lst[[j+1]] <- c(a[i+1:(K-i)])
i <- i+1
j <- j+2
if(i> K-1) break
}
##关联名称和值--类似于Python中的dict 以及Scala中的hash
lst[[18]] <- NULL
lst[sapply(lst,is.null)] <- NULL
##factor因子--用于分组
tt2 <- as.factor(append(vec,seq(2,33,2)) )
levels(tt2)
labels(tt2)
## array--数组
## table---表
contingency table 列联表
table--第一个参数是因子或者因子的列表
·········数据参数
数据变换
数据基本类型变换
从计算机角度:
正常数据:
character integer double logic complex
as.numeric() as.double()
其他数据: Inf
从数学角度
定性和定量
定性数据:定类<Nominal> categorical
定序<ordinal>
定量数据:
定距--区间<interval> :定距尺度中没有绝对零点
定比--比率<ratio>
离散和连续:
计数属性是离散数据--定比数据
变换:
数据-取整、有效数字、四舍五入、科学计数法
连续数据离散化
连续数据离散化--分箱技术
##分组的目的是显示数据的变异性--cut(数据源,分段向量)-把数值型对象分区间转换为因子
#ageFactor <- cut(as.numeric(agefre$age),c(0,15,24,32,40,48,56,64,72,Inf))
变量标注和值标注
数据结构变换:
as.data.frame()
data.frame()
向量--同质--name属性,length()
矩阵比向量多了两个属性--行数和列数--dim属性<nrow,ncol>,禁止自动减少降维drop=FALSE
数据框比矩阵--列的属性可以不同,clonames属性
列表比数据框--
列表--[ ] 、 [[ ]]
移除变量属性 attributes() <- NULL
数据形式变换
因子:
改变因子水平的顺序-
--因子的顺序通过levels参数指定
factor(datafactor,level=c('b','c','a'))
---根据数据的值改变因子水平的顺序
reorder()
改变因子水平的名称
--levels(datafactor) <- list(small='b',big='c',media='a')
去掉因子不再使用的水平
--droplevels()
把一个分类变量转化成另外一个分类变量
--match()
oldval <-
newcal <- factor(c('aa,'cc','bb'))
newcal[match(datafactor$let,oldval)]
多个因子的组合
expand.grid(f,g) 水平的所有组合-即其笛卡尔积
数据框--
重排数据框的列
长数据框--短数据框
按照分组转化数据--分组汇总
plyr包---ddply()
summarise()
数据处理
Z-score标准化方法-原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。经过处理的数据符合标准正态分布,即均值为0,标准差为1
x*=(x-均值)/标准差
scale(x)=scale(x,center=T,scale=T),默认设置-代表中心化后标准化
对数据进行中心化预处理,这样做的目的是要增加基向量的正交性。
对数据归一化的目的是消除特征之间的差异性。便于对一心一意学习权重
附录:
条件过滤---逻辑运算 和关系运算--得出的值是布尔向量<逻辑值向量>
关系运算符< 比较运算符> > >= != ==
逻辑运算 ! & |
&& 短路与
|| 短路或
选择适合的索引技术--
名称索引-- $ @
位置索引--下标索引,向量索引 [ [[
条件索引----
索引前加负号 或者加!
字符串和日期时间
paste 连接字符串
字符的所有组合 outer
使用outer和paste 生成所有组合
编程使用
建议尽可能的使用名称索引,而避免使用数字缩影
名称索引使代码更加易懂,尤其是在和其他人合作或者完成代码很长时间再过来看的时候
代码也不容易因为数据框行和列的增减而得不到原先的结果。
参考:
R语言merge函数总结 http://bbs.pinggu.org/thread-3234639-1-1.html