数据处理之——dplyr
dplyr简介关于R中的数据处理,上期我们介绍了 示例数据
单表操作函数select
## 在pgdat数据集中选择场次、球员姓名、助攻数、得分、抢断、失误数据 ## ? rk player ast pts stl tov ## 1 ?1 ? 库里 ? 6 ?46 ? 2 ? 2 ## 2 ?2 ? 库里 ? 5 ?37 ? 2 ? 4 ## 3 ?3 ? 库里 ? 8 ?17 ? 1 ? 2 ## 4 ?4 ? 库里 ? 9 ?27 ? 2 ? 3 ## 5 ?5 ? 库里 ?15 ?21 ? 3 ? 3 ## 6 ?6 ? 库里 ? 7 ?39 ? 2 ? 4 renamepgdat1,0);">name = player## ? rk name ast pts stl tov ## 1 ?1 库里 ? 6 ?46 ? 2 ? 2 ## 2 ?2 库里 ? 5 ?37 ? 2 ? 4 ## 3 ?3 库里 ? 8 ?17 ? 1 ? 2 ## 4 ?4 库里 ? 9 ?27 ? 2 ? 3 ## 5 ?5 库里 ?15 ?21 ? 3 ? 3 ## 6 ?6 库里 ? 7 ?39 ? 2 ? 4 filter/slice
# 选择得分大于40分的数据 ## ? rk name ast pts stl tov ## 1 ?1 库里 ? 6 ?46 ? 2 ? 2 ## 2 21 库里 ? 3 ?41 ? 4 ? 5 ## 3 24 库里 ? 6 ?46 ? 2 ? 3 ## 4 25 库里 ? 8 ?51 ? 0 ? 5 ## 5 26 库里 ? 7 ?42 ? 1 ? 7 ## 6 33 库里 ? 2 ?51 ? 3 ? 7 # 选择助攻数大于15的数据 slice(pgdat1,1:6) ## ? rk name ast pts stl tov ## 1 ?1 库里 ? 6 ?46 ? 2 ? 2 ## 2 ?2 库里 ? 5 ?37 ? 2 ? 4 ## 3 ?3 库里 ? 8 ?17 ? 1 ? 2 ## 4 ?4 库里 ? 9 ?27 ? 2 ? 3 ## 5 ?5 库里 ?15 ?21 ? 3 ? 3 ## 6 ?6 库里 ? 7 ?39 ? 2 ? 4 为了显示方便,这里的数据用 arrange
# 把数据按得分和助攻数降序排列
distinct
# 把数据按球员进行去重处理 值得特别注意的是,用该函数进行数据列的去重处理时会仅保留最先出现的数据行。 mutate/transmute
## 计算球员的助攻失误比以及效率值 transmute## ? ?atr per
## 1 3.00 ?47
## 2 1.25 ?36
## 3 4.00 ?18
## 4 3.00 ?32
## 5 5.00 ?24
## 6 1.75 ?43
R的基本函数中 summarise
summarisemast meanmpts ## ? ? ? mast ? ?mpts ## 1 8.305489 21.7852 sample_n/sample_frac
# 随机抽取5条数据 # 按0.01比例抽取部分数据 分组操作函数group_by
# 按球员进行分组 管道操作?%>% or %.%
管道操作符可以把前面计算的结果输出作为后续计算的输入,它有两个好处, 第一,它的使用可以大大简化程序的中间赋值操作,从而提高代码写作的效率; 第二,在查阅代码时,代码的逻辑层次结构也非常清晰易读。我们来看看如下示例:
dat1 dat2 dat1,0);">dat3 dat2,0);">dat4 dat3,153);">20 & 10dat4 ## Source: local data frame [1 x 4] ## ## ? player ?toln ? mast ? mpts ## ? ?(chr) (int) ?(dbl) ?(dbl) ## 1 ? 威少 ? ?80 10.425 23.475
pgdat %>% ?( ? ?) ?## Source: local data frame [1 x 4] ## ## ? player ?toln ? mast ? mpts ## ? ?(chr) (int) ?(dbl) ?(dbl) ## 1 ? 威少 ? ?80 10.425 23.475 两表操作函数表关联
df1 data_framex c(1,0);">y 2:1## Source: local data frame [2 x 2] ## ## ? ? ? x ? ? y ## ? (dbl) (int) ## 1 ? ? 1 ? ? 2 ## 2 ? ? 2 ? ? 1 df2 3a 10,0);">b = "a"## Source: local data frame [2 x 3] ## ## ? ? ? x ? ? a ? ? b ## ? (dbl) (dbl) (chr) ## 1 ? ? 1 ? ?10 ? ? a ## 2 ? ? 3 ? ?10 ? ? a
inner_joindf2## Source: local data frame [1 x 4] ## ## ? ? ? x ? ? y ? ? a ? ? b ## ? (dbl) (int) (dbl) (chr) ## 1 ? ? 1 ? ? 2 ? ?10 ? ? a
left_join## Joining by: "x"
## Source: local data frame [2 x 4] ## ## ? ? ? x ? ? y ? ? a ? ? b ## ? (dbl) (int) (dbl) (chr) ## 1 ? ? 1 ? ? 2 ? ?10 ? ? a ## 2 ? ? 2 ? ? 1 ? ?NA ? ?NA
right_join## Source: local data frame [2 x 4]
##
## ? ? ? x ? ? y ? ? a ? ? b
## ? (dbl) (int) (dbl) (chr)
## 1 ? ? 1 ? ? 2 ? ?10 ? ? a
## 2 ? ? 3 ? ?NA ? ?10 ? ? a
df1## Source: local data frame [2 x 4]
##
## ? ? ? x ? ? a ? ? b ? ? y
## ? (dbl) (dbl) (chr) (int)
## 1 ? ? 1 ? ?10 ? ? a ? ? 2
## 2 ? ? 3 ? ?10 ? ? a ? ?NA
full_join## Source: local data frame [3 x 4]
##
## ? ? ? x ? ? y ? ? a ? ? b
## ? (dbl) (int) (dbl) (chr)
## 1 ? ? 1 ? ? 2 ? ?10 ? ? a
## 2 ? ? 2 ? ? 1 ? ?NA ? ?NA
## 3 ? ? 3 ? ?NA ? ?10 ? ? a
集合操作
12,153);">1L,153);">1L## Source: local data frame [2 x 2] ## ## ? ? ? x ? ? y ## ? (int) (int) ## 1 ? ? 1 ? ? 1 ## 2 ? ? 2 ? ? 1 ## Source: local data frame [2 x 2] ## ## ? ? ? x ? ? y ## ? (int) (int) ## 1 ? ? 1 ? ? 1 ## 2 ? ? 2 ? ? 2 intersectdf1,204); border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: white;">## Source: local data frame [1 x 2]
##
## ? ? ? x ? ? y
## ? (int) (int)
## 1 ? ? 1 ? ? 1
union## Source: local data frame [3 x 2]
##
## ? ? ? x ? ? y
## ? (int) (int)
## 1 ? ? 1 ? ? 1
## 2 ? ? 2 ? ? 1
## 3 ? ? 2 ? ? 2
setdiff## Source: local data frame [1 x 2]
##
## ? ? ? x ? ? y
## ? (int) (int)
## 1 ? ? 2 ? ? 1
df2,204); border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: white;">## Source: local data frame [1 x 2] ## ## ? ? ? x ? ? y ## ? (int) (int) ## 1 ? ? 2 ? ? 2 等价关系R中的两表操作函数与sql有如下等价关系: 小结
|