全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 数据分析与数据挖掘
1463 0
2018-04-25
#加载包,用到nycflights13包里的数据
library(dplyr)
library(nycflights13)
##数据预览-----
head(flights)
tbl_df(flights)

##数据筛选--------
flights[flights$month==1&flights$day==1,]
filter(flights,month==1,day==1)
slice(flights,1L) ##第一行数据

##数据重排序-----
arrange(flights,desc(arr_delay)) #按照延误时间降序排序

#数据选择--------
#starts_with()、ends_with()、
#num_range('x',1:5,width=2)#选择从x01到x05的数值型变量
#one_of('x','y')选择x y 变量,即声明变量
#everything()#所有变量

select(flights,year:month)
#选取变量名中包含etal的列  
select(iris, contains("etal"))
#正则表达式匹配,返回变量名中包含t的列  
select(iris, matches(".t."))
#调整列顺序,把Species列放到最前面  
select(iris, Species, everything())
#两列无重复的匹配
distinct(select(flights,origin,dest))

#数据变形-------
flights <- mutate(flights,gain = arr_delay - dep_delay, speed = distance/air_time * 60)#直接生成新变量
transform(flights,##修改或者生成新变量
          gain = arr_delay - dep_delay,
          gain_per_hour = gain / (air_time / 60))
transmute(flights,gain = arr_delay - dep_delay, speed = distance/air_time * 60) ##只保留新生成的列

#数据汇总-----
#我们还可以用sample_n() and sample_frac()函数随机选择计算汇总数据。
summarise(flights,
          delay = mean(dep_delay, na.rm = TRUE))

#数据分组------
by_tailnum <- group_by(flights, tailnum)
delay <- summarise(by_tailnum,
                   count = n(),
                   dist = mean(distance, na.rm = TRUE),
                   delay = mean(arr_delay, na.rm = TRUE))
delay <- filter(delay, count > 20, dist < 2000)

#表关联----
#如果by参数不设置,默认是按照两个表同名字段匹配
df1 <- data.frame(id=c(1:6),m=sample(10,6))
df2 <- data.frame(id=c(3:8),n=sample(6,6))
inner_join(df1,df2,by=c('id'='id'))
full_join(df1,df2) #全连接
semi_join(df1,df2)#返回df中与df2匹配的记录
anti_join(df1,df2)#返回df1中与df2不匹配的记录

#集合操作--------
df <- data.frame(a=sample(10,8,replace = TRUE),b=rep(1,8))
first <- df[1:4, ]  
second <- df[5:8, ]  
intersect(first, second)  #取两个集合的交集  
union(first, second)  #取两个集合的并集,并去重  
setdiff(first, second)  #取两个集合的差集,返回first中存在但second中不存在的记录
union_all(first, second)  #取两个集合的并集, 不去重
setequal(df, df[1:8, ])  #判断两个集合是否相等,返回TRUE

#合并数据框(按行或者列合并)-------------
bind_rows(first,second)
bind_rows(list(first,second),.id='id') #按行合并,并指明来自哪个数据框
bind_cols(first,second)  ##必须相同行

#数据抽样------
sample_frac(flights,1.5,replace = TRUE)#随机有重复的取1.5倍行数据
sample_n(flights, 10)#随机无重复的取10行数据

#管道操作-----

iris %>%
  group_by(Species) %>%
  summarise(total = sum(Sepal.Length)) %>%
  arrange(desc(total)) %>%
  View()

#连接数据库Mysql
#dplyr连接mysql数据库
library(dplyr)
my_db <- src_mysql(dbname = "rmysql",
                   host = localhost,
                   port = 3306,
                   user = "rmysql",
                   password = "rmysql")
my_tbl <- tbl(my_db,from = "my_table") #my_table为数据库中的表

#其他小技巧---------
n(x) #x中行的数量
n_distinct(x): #x中不重复行的数量
first(x)  last(x) #x中第一行与最后一行




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群