数据清洗神器之dplyr包(二)

上次跟大家一起学习了dplyr包的基本语法,大家已经对dplyr包有了初步的了解,接下来我们继续学习该包其他的函数。

安装并加载包

#install.packages("dplyr")
library(dplyr)
## ## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## ## filter, lag
## The following objects are masked from 'package:base':
## ## intersect, setdiff, setequal, union

二.分组动作 group_by()

by_cyl=summarise(
disp = mean(disp),
hp = mean(hp),group_by(mtcars,cyl))#按照cyl分组计算变量disp和hp的平均值

三. 连接符 %>%

使用时把数据名作为开头, 然后依次对此数据进行多步操作.

iris %>% 
mutate(Sepal.Length10 = Sepal.Length*10) %>%
select(Sepal.Length10, Sepal.Length) %>% slice(1:15)#在iris中添加一个变量Sepal.Length10,选出变量名为Sepal.Length10和Sepal.Length的列,再选出这两列的前15行
##    Sepal.Length10 Sepal.Length
## 1 51 5.1
## 2 49 4.9
## 3 47 4.7
## 4 46 4.6
## 5 50 5.0
## 6 54 5.4
## 7 46 4.6
## 8 50 5.0
## 9 44 4.4
## 10 49 4.9
## 11 54 5.4
## 12 48 4.8
## 13 48 4.8
## 14 43 4.3## 15 58 5.8

四. 数据关联:join

注意:要连结的数据集中不要引入factor, 可令stringsAsFactors = F

以R自带的band_members和band_instruments为例,先查看数据

View(band_members)
View(band_instruments)

1.內连inner_join,取交集

band_members %>% inner_join(band_instruments, by = "name")
## # A tibble: 2 x 3
## name band plays
## <chr> <chr> <chr>
## 1 John Beatles guitar## 2 Paul Beatles bass

上一行命令等同于下面这行命令

inner_join(band_members,band_instruments,by = "name")
## # A tibble: 2 x 3
## name band plays
## <chr> <chr> <chr>
## 1 John Beatles guitar## 2 Paul Beatles bass

2.左连left_join

band_members %>% left_join(band_instruments,by = "name")
## # A tibble: 3 x 3
## name band plays
## <chr> <chr> <chr>
## 1 Mick Stones <NA>
## 2 John Beatles guitar## 3 Paul Beatles bass

3.右连接

band_members %>% right_join(band_instruments,by = "name")
## # A tibble: 3 x 3
## name band plays
## <chr> <chr> <chr>
## 1 John Beatles guitar
## 2 Paul Beatles bass ## 3 Keith <NA> guitar

4.全连full_join

band_members %>% full_join(band_instruments,by = "name")
## # A tibble: 4 x 3
## name band plays
## <chr> <chr> <chr>
## 1 Mick Stones <NA>
## 2 John Beatles guitar
## 3 Paul Beatles bass ## 4 Keith <NA> guitar

五. 数据合并: bind

这里的bind函数相当于base包里的cbind()函数和rbind()函数

这里所使用的是R自带的数据集starwars

1.创建数据库

one <- starwars[1:4, ]
two <- starwars[9:12, ]
View(one)
View(two)

2.行合并

bind_rows(list(one, two))
## # A tibble: 8 x 14
## name height mass hair_color skin_color eye_color birth_year sex gender
## <chr> <int> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr>
## 1 Luke Sk~ 172 77 blond fair blue 19 male mascu~
## 2 C-3PO 167 75 <NA> gold yellow 112 none mascu~
## 3 R2-D2 96 32 <NA> white, bl~ red 33 none mascu~
## 4 Darth V~ 202 136 none white yellow 41.9 male mascu~
## 5 Biggs D~ 183 84 black light brown 24 male mascu~
## 6 Obi-Wan~ 182 77 auburn, wh~ fair blue-gray 57 male mascu~
## 7 Anakin ~ 188 84 blond fair blue 41.9 male mascu~
## 8 Wilhuff~ 180 NA auburn, gr~ fair blue 64 male mascu~
## # ... with 5 more variables: homeworld <chr>, species <chr>, films <list>,## # vehicles <list>, starships <list>

其他例子的行合并

bind_rows(
c(a = 1, b = 2),
tibble(a = 3:4, b = 5:6),
c(a = 7, b = 8))
## # A tibble: 4 x 2
## a b
## <dbl> <dbl>
## 1 1 2
## 2 3 5
## 3 4 6## 4 7 8

3.列合并

bind_cols(one, two)#等于:bind_cols(list(one, two))
## New names:
## * name -> name...1
## * height -> height...2
## * mass -> mass...3
## * hair_color -> hair_color...4
## * skin_color -> skin_color...5## * ...
## # A tibble: 4 x 28
## name...1 height...2 mass...3 hair_color...4 skin_color...5 eye_color...6
## <chr> <int> <dbl> <chr> <chr> <chr>
## 1 Luke Skywalker 172 77 blond fair blue
## 2 C-3PO 167 75 <NA> gold yellow
## 3 R2-D2 96 32 <NA> white, blue red
## 4 Darth Vader 202 136 none white yellow
## # ... with 22 more variables: birth_year...7 <dbl>, sex...8 <chr>,
## # gender...9 <chr>, homeworld...10 <chr>, species...11 <chr>,
## # films...12 <list>, vehicles...13 <list>, starships...14 <list>,
## # name...15 <chr>, height...16 <int>, mass...17 <dbl>, hair_color...18 <chr>,
## # skin_color...19 <chr>, eye_color...20 <chr>, birth_year...21 <dbl>,
## # sex...22 <chr>, gender...23 <chr>, homeworld...24 <chr>,
## # species...25 <chr>, films...26 <list>, vehicles...27 <list>,## # starships...28 <list>

六. 集合操作: set

intersect(band_members[,1],band_instruments[,1])#取两个集合的交集
## # A tibble: 2 x 1
## name
## <chr>
## 1 John ## 2 Paul
union(band_members[,1],band_instruments[,1])#取两个集合的并集,并进行去重
## # A tibble: 4 x 1
## name
## <chr>
## 1 Mick
## 2 John
## 3 Paul ## 4 Keith
union_all(band_members[,1],band_instruments[,1])#取两个集合的并集,不去重
## # A tibble: 6 x 1
## name
## <chr>
## 1 Mick
## 2 John
## 3 Paul
## 4 John
## 5 Paul ## 6 Keith
setdiff(band_members[,1],band_instruments[,1])#取两个集合的差集
## # A tibble: 1 x 1
## name
## <chr>## 1 Mick
setequal(band_members[,1],band_instruments[,1])#判断两个集合是否相等
## [1] FALSE

其他函数:count统计某列的unique值

count(iris,Species)
##      Species  n
## 1 setosa 50
## 2 versicolor 50## 3 virginica 50

欢迎大家关注我们的公众号:R语言与SPSS学习笔记

分享实用的SPSS及R处理数据、分析数据及做图的使用技巧

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容