使用R语言的dplyr包进行数据预处理
2017-03-08 21:29
169 查看
数据清洗和整理:
总结整理的各种资源,包括使用dplyr包以及R自带的函数等等,主要用于数据预处理
筛选各种变量select()
根据一个或者多个变量进行排序arrange()
变量重命名以及增加新的变量names()或者colnames()&mutate()
根据某个变量进行分类汇总summarize()
简单随机抽样sample()
各种连接inner_join()等
按行或者按列进行合并rbind()或者cbind()
使用R中的数据
1.筛选符合条件的数据
同样的效果,都是从数据集flight_df中筛选出变量
上面这段代码类似于sql中的select语句
2.筛选某些变量
通过列名来选择
通过 :来选择
通过 - 来去掉不需要的变量
3.排序
将flights_df数据集按照year,month,day的升序排列
如果按照单个变量进行排序的话,也可以使用sort()函数
decreasing默认是F,升序排列,如果是T那么就是降序排列
na.list默认是F,去掉缺失值NA,如果是T那么就是不去掉缺失值,缺失值在最后
order函数也是排序,但是返回的是元素所在的位置
上面这段代码类似于sql中的order by语句
4.给列命名
如果数据集为数据框data.frame,那么可以使用fix(flights)就可以打开数据编辑器,在里面直接修改就可以
如果数据集为列表list,使用names()函数或者colnames()函数进行重命名,代码如下:
5.产生新的列
如下代码在数据集flights中产生了gain和speed两列
6.随机抽取样本
在数据集中随机抽取10个样本,不放回
在数据集中随机抽取四分之三的数据为训练集,四分之一的数据为测试集
7.分类汇总
进行简单的计算,比如求某一列的均值
按某一列进行分组,得到新的数据
分组以后,统计每组的个数,求每组的distance的均值
总结:上面group_by()以及summarize()函数中都有数据集名flights,还有一种通过引入%>%的方法,不在函数中使用数据集名
8.各种连接
inner_join #内连接
left_join #左连接
right_join #右连接
full_join #全连
semi_join # 返回能够与y表匹配的x表所有记录
anti_join # 返回无法与y表匹配的x表的所有记录
9.按行或者按列进行合并
注意:对应变量的数据类型必须相同
按行合并:rbind()#增加行数
按列合并:cbind()以及merge()#增加列数
其中merge只按照共同的变量进行合并,作用类似于inner_join
总结整理的各种资源,包括使用dplyr包以及R自带的函数等等,主要用于数据预处理
筛选各种变量select()
根据一个或者多个变量进行排序arrange()
变量重命名以及增加新的变量names()或者colnames()&mutate()
根据某个变量进行分类汇总summarize()
简单随机抽样sample()
各种连接inner_join()等
按行或者按列进行合并rbind()或者cbind()
使用R中的数据
library(nycflights13) library(dplyr)
1.筛选符合条件的数据
同样的效果,都是从数据集flight_df中筛选出变量
data1<-filter(flights_df, month == 1, day == 1) flights_df[flights_df$month == 1 & flights_df$day == 1, ]
上面这段代码类似于sql中的select语句
select * from flights_dt where month=1 and day=1
2.筛选某些变量
通过列名来选择
select(flights_df, year, month, day)
通过 :来选择
select(flights_df, year:day)
通过 - 来去掉不需要的变量
select(flights_df, -(year:day))
3.排序
将flights_df数据集按照year,month,day的升序排列
arrange(flights_df, year, month, day)
如果按照单个变量进行排序的话,也可以使用sort()函数
decreasing默认是F,升序排列,如果是T那么就是降序排列
na.list默认是F,去掉缺失值NA,如果是T那么就是不去掉缺失值,缺失值在最后
sort(filghts$year,decreasing=F, na.last= F)
order函数也是排序,但是返回的是元素所在的位置
order(filghts$year,decreasing=F, na.last= F)
flights[order(-flights$month),]
上面这段代码类似于sql中的order by语句
select * from flights_dt order by year,month,day desc
4.给列命名
如果数据集为数据框data.frame,那么可以使用fix(flights)就可以打开数据编辑器,在里面直接修改就可以
如果数据集为列表list,使用names()函数或者colnames()函数进行重命名,代码如下:
> names(flights_cs)#首先查看列名 [1] "year" "month" "day" > colnames(flights_cs)<-c("year","day","week")#给列重新命名 > names(flights_cs)#看到列名已经通过colnames函数更改 [1] "year" "day" "week" > names(flights_cs)<-c("a","b","c")#使用函数names进行命名 > names(flights_cs)#查看最新的列名 [1] "a" "b" "c"
5.产生新的列
如下代码在数据集flights中产生了gain和speed两列
flights_new<-mutate(flights, gain=arr_delay - dep_delay, speed=distance / air_time * 60)
6.随机抽取样本
在数据集中随机抽取10个样本,不放回
sample(flights,10,replace=TRUE)
在数据集中随机抽取四分之三的数据为训练集,四分之一的数据为测试集
set.seed(1) sub<-sample(1:nrow(flights),round(nrow(flights)/4)) data_train<-flights[-sub,]#训练集 data_test<-flights[sub,]#测试集
7.分类汇总
进行简单的计算,比如求某一列的均值
summarise(flights,mean(distance))
按某一列进行分组,得到新的数据
by_tailnum <- group_by(flights, tailnum)
分组以后,统计每组的个数,求每组的distance的均值
delay <- summarise(by_tailnum, count = n(), dist = mean(distance))
总结:上面group_by()以及summarize()函数中都有数据集名flights,还有一种通过引入%>%的方法,不在函数中使用数据集名
flights %>% group_by(year, month, day) %>% select(arr_delay, dep_delay) %>% summarise( arr = mean(arr_delay), dep = mean(dep_delay) ) %>%
8.各种连接
inner_join #内连接
left_join #左连接
right_join #右连接
full_join #全连
semi_join # 返回能够与y表匹配的x表所有记录
anti_join # 返回无法与y表匹配的x表的所有记录
> options(warn =-1)#这个是忽略警告,默认warn=0是提示警告 > library(dplyr)
> df1 <- data.frame(x = c('a','b','c'), y = c('A','B','C')) > df2 <- data.frame(x = c('a','b','d'), z = c(1,2,3))
> inner_join(df1,df2) #内连接 Joining, by = "x" x y z 1 a A 1 2 b B 2 > left_join(df1,df2) #左连接 Joining, by = "x" x y z 1 a A 1 2 b B 2 3 c C NA > right_join(df1,df2) #右连接 Joining, by = "x" x y z 1 a A 1 2 b B 2 3 d <NA> 3 > full_join(df1,df2) #全连 Joining, by = "x" x y z 1 a A 1 2 b B 2 3 c C NA 4 d <NA> 3 > semi_join(df1,df2) # 返回能够与df2表匹配的df1表所有记录 Joining, by = "x" x y 1 a A 2 b B > anti_join(df1,df2) # 返回无法与df2表匹配的df1表的所有记录 Joining, by = "x" x y 1 c C
9.按行或者按列进行合并
注意:对应变量的数据类型必须相同
按行合并:rbind()#增加行数
按列合并:cbind()以及merge()#增加列数
其中merge只按照共同的变量进行合并,作用类似于inner_join
> sj1 <- data.frame(x = c('a','b','c'), y = c('A','B','C')) > sj2<- data.frame(x = c('a','b','d'), y = c("H","I","J")) > rbind(sj1,sj2) x y 1 a A 2 b B 3 c C 4 a H 5 b I 6 d J > cbind(sj1,sj2) x y x y 1 a A a H 2 b B b I 3 c C d J > merge(sj1,sj2,by="x") x y.x y.y 1 a A H 2 b B I
相关文章推荐
- 如何使用R语言的Boruta包进行特征选择
- 使用 dplyr 包进行数据操作与清洗 | EthanDeng(转载)
- 如何使用R语言链接数据库并对数据库中的表进行查询操作
- 使用R语言进行协整关系检验
- R语言使用神经网络进行标识检测
- 使用sklearn进行数据挖掘-房价预测(4)—数据预处理
- R语言dplyr、tidyr使用笔记
- 安装AIC准则使用前进法后退法和逐步回归法进行变量选择的r语言代码
- 使用R语言对照片人物进行情绪分析
- 使用R语言进行异常检测
- R语言:使用rvest包进行数据简单抓取
- 如何使用R语言的Boruta包进行特征选择
- 【R笔记】使用R语言进行异常检测
- 《机器学习与R语言》读书笔记2:使用R进行机器学习
- R语言进行数据预处理
- 使用R语言进行一元回归
- 使用R语言进行线性回归
- R语言使用tryCatch进行简单的错误处理
- 使用R语言进行中文分词
- 使用R语言对照片人物进行情绪分析