数据类型转换 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
判断 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)