R语言(五)-- 数据转换(预处理)

数据类型转换 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

判断 is

methods(is)  #is的所有用法

判断是否为数据框

is.data.frame(data) 

转换

其中向量可以转换为多种数据

矩阵转换为数据框

data <- as.data.frame(data)

数据框 转换为矩阵

as.matrix()

转换为因子

as.factor()

不需要名字,去除列名

uname()

转换为向量

unlist()

取子集 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

取数据框特定的行和列

data1 <-data[c(1:50),c(1:30)]  #连续提取行,列

data2 <-data[c(1,3,4,5),c(1,12,15)] #非连续提取行,列

用逻辑值进行筛选

data3 <-data[which(data$factor == 7)]  #选择factor为7的

data4 <- data[which(data$factor > 7 & data$factor <= 100]

subset 函数

data4 <- subset(data, data$factor > 7 & data$factor <= 100]

sample 抽样

可以进行有无返回的随机抽样

sample(x, num, replace = True)  #x为要抽样的样本,num指抽样个数,replaceT指有放回

合并- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

cbind(dataframe, factor)  #合并列

rbind()  #行中每一列必须与原数据相同

merge(x,y ,by= "") # by是指通过什么合并

翻转 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

行和列的翻转t()

tdata<- t(data)

翻转单独一行rev()

rev(vector)

e.g反转行

women[rev(rownames(women)),]

修改 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

删除数据重复项

duplicated(data) #返回重复的布尔值

data[!duplicated(data),] #取出非重复的部分

unique(data) #一步取出非重复部分

修改某一列transform()

transform(women, height = height*2.54)#原数据操作

transform(women, cm = height*2.54) #生成新的一列

排序 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

对单个条件排序

sort()

sort()  #默认数字从小到大,英文则按首字母排

rev(sort())  #按相反的排序

#sort不能用于数据框排序,只能用向量,但可以曲线救国

mtcars[sort(rownames(mtcars)), ]

order() 

#返回的是向量所在的位置而不是排序后的结果

mtcars[order(mtcars$mpg), ]

对多个条件排序

mtcars[order(mtcars$mpg, mtcars$disp), ]

常用数据转换包- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

reshape2

宽变长

melt(data, id.vars = c("col1", "col2" )) #糅合数据, 将宽数据变成长数据,id.vars是要保留的

长变宽

dcast(aql, month+day ~variable) #根据variable列哥哥level作为列名,month 和day列为id放在最左边,其余各变量自左而右一次追加到新数据集

tidyr

tidydata:一个观察和一个变量确定一个值

宽变长

gather()

长变宽

spread()

一列分成多列

separate()

e.g

df  <- data.frame(x = c(NA, "a.b", "a.d", "b.c"))

separete(df,col = x, into = c("A", "B"),sep = "")  #默认会识别分隔符,但也可通过sep来指定

多列合并一列

unit() 

e.g 

unite(x, col = "AB", A, B, sep = "-")

dplyr

过滤

* :: 是为了防止函数名字相同的包的冲突

filter()

e.g

dplyr::filter(iris, Sopal.Length >7) #过滤掉鸢尾花花萼长度<7的

去除重复行

dplyr::distinct(data) 

切片取出任意行

dplyr::slice(iris,10:15) #取出10-15行

取样

dplyr::sample_n(iris, 10)  #随机抽取十行

dplyr::sample_frac(iris,0.1)  #按比例随机选取

排序

dplyr::arrange(iris, Sopal.Length)   #按照花萼长度进行排序

dplyr::arrange(iris, desc(Sopal.Length))  #按照相反的方向进行排序 

取子集

select()

统计

summarise(iris, avg = mean(Sopal.Length))   #计算花萼的平均长度

分组

dplyr::group_by(iris, Species)

iris %>% group_by(Species)

添加变量

dplyr::mutate(iris, new = Separ.Length + Petal.Length)

多表操作

dplyr::left_join()  #左链接

dplyr::right_join()  #右链接

#内链接是取交集

dplyr::full_join() #全链接是取并集

dplyr::semi_join()  #半链接:根据右侧表的内容对左侧表进行过滤

dplyr::anti_join()   #反链接:输出补集

多数据集操作

intersect() #取交集

union_all() #取并集

setdiff()  #取补集

管道符(链式操作符%>%)- - - - - - - - - - - - - - - - - - - - - - - - - - - -

实现将一个函数的输出传递给下一个函数,作为下一个函数的输入

可用ctrl + shift + M快捷键输出

对数据框进行数学计算 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

行总和 rowSums()

rs <- rowSums(worldphones)

total <- cbind(worldphones,Total = rs) #将这一行添加

列平均值colMeans()

cm<- colMeans(worldphones)

apply() 这个比较万能,就用它了

apply(worldphones, MARGIN = 1, FUN = sum)

MARGIN:1代表对行处理,2代表对列处理

lapply() 返回值是列表

sapply() 返回值是向量/矩阵

tapply() 处理因子数据,根据因子分组然后处理

tapply(state.name, state.dicision, FUN = length)

数据的中心化与标准化处理 - - - - - - - - - - - - - - - - - - - - - - - - - -  

作用:消除量纲对数据的影响,让数据间的差别更小

中心化

数据集中的各项数据减去数据集的均值

x-mean(x)

标准化

数据集中心化之后再除以数据集的标准差

x-mean(x) / sd(x)

中心化+标准化

scale(x,center = T, scale = T)

猜你喜欢

转载自blog.csdn.net/Scabbards_/article/details/130441677