数据整理—dplyr包(mutate系列)

栏目: R语言 · 发布时间: 4年前

数据整理—dplyr包(mutate系列)

作者:小橙子

来源: 小橙子学数据分析

有很多成语,来形容根据一个事物,生成了另一个事物。

比如:依样画葫芦、东施效颦等等(略有歧义)。

而今天讲解的mutate,就类似这种情况,根据现有的信息,生成一个新的变量。

dplyr中,几个主要函数

1filter 系列  #筛选满足条件的样本(cases),第一篇已经讲解  
2select 系列 #筛选满足条件的变量,第二篇已经讲解
3mutate 系列 #生成新的变量
4summarise 系列 #概括数据集信息
5join 系列 #关联函数,同 SQL 中的join

在数据处理过程中,经常会遇到这几个函数

mutate系列: mutate、mutate_all、mutate_at、mutate_if、transtate

用法:mutate(.data, ...)

mutate的使用方式,主要是依靠"..."的公式变化,生成新的变量

mutate支持以下几种公式 :

  1. +、-、*、÷ 、%%、%|% 等常用计算方式

  2. lead()、 lag()

  3. dense_rank(), min_rank(), percent_rank(), row_number(), cume_dist(), ntile()

  4. cumsum(), cummean(), cummin(), cummax(), cumany(), cumall()

  5. na_if(), coalesce()

  6. if_else(), recode(), case_when()

先从" rank "系列开始介绍,这一函数类,主要是用来划分名次、等级、百分比、密度等等

 1#percent_rank,按照[0,1]百分比的形式进行排序
2# 举例说明,按照x的数值,按照百分比进行划分
3x <- c(5, 1, 3, 2, 4)
4percent_rank(x)
5# [1] 1.00 0.00 0.50 0.25 0.75
6# 这类函数比较适用于 ,需要排名次的场景。比如考试、比赛...
7
8# 比如根据iris中的Sepal.Length,进行百分比表示,
9iris %>%
10 mutate(Length_rank = percent_rank(Sepal.Length)) %>% # %>% 管道的标识符
11 select(Length_rank,everything()) # select函数中,everything()可以用来更换变量顺序
12# Length_rank Sepal.Length Sepal.Width Petal.Length Petal.Width Species
13# 0.21476510 5.1 3.5 1.4 0.2 setosa
14# 0.10738255 4.9 3.0 1.4 0.2 setosa
15# ...(数据省略)
16
17# row_number(),不仅可以用来对想来排序,也可以表示获取行数
18 mutate(mtcars, row_number() == 1L) # 新生成的变量,用来判断是否是第一行,返回TRUE 或者 FALSE
19 mtcars %>% filter(between(row_number(), 1, 10)) # 通过row_number,筛选1-10行.有点类似 top_n(10)
20
21 # ntile,切割数据集为N块,返回具体的数值,属于等分切割
22 ntile(runif(10), 5)
23# [1] 1 2 4 5 5 3 4 2 3 1
24# 某种程度上,ntile可以用来划分训练集和测试集(类似sample函数)
25# ind <- sample(2, nrow(mtcars), replace = TRUE, prob = c(0.8,0.2))
26# mtcars[ind == 1,]
27# 备注:ntile对数据框使用的时候,如果没有特殊标明具体的数据列,ntile会对所有的列进行切割操作

再说一下 "cum" 函数系列,这类函数计算累积指标,比如截止到某一天的平均值、总和、乘积等等。

 1# cumsum,累积相加的数值
2cumsum(1:10)
3# 1 3 6 10 15 21 28 36 45 55
4# 原数据集有N个,返回也是N个
5# 类似MS_SQL中的sum(s)over(order by y)
6
7# cumany(), cumall(),则是逻辑判断,并非计算数值
8cumall(-5:5)
9# TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
10# 返回的是逻辑值,0代表FALSE

最后说一下 "判断" 函数系列,这类函数应用比较广泛。

比如生活中,当天空下雨了,小明就打伞了

类似EXCEL中的 if函数,vlookup函数等等

 1# if_else
2# 用法:if_else(condition, true, false, missing = NULL),比传统的ifelse多了一个missing参数
3# 并且if_else能保留原数据的数据类型,不会降维操作
4
5# 假设x >= 0,则 y-1,y < 0 的情况下, y + 1
6df <- data.frame(x = c(-5:4), y = runif(10))
7df %>
% mutate( xy = if_else(x >= 0, y -1, y+1, y))

8# x y xy
9# -5 0.7760150 1.7760150
10# -4 0.9310976 1.9310976
11# case_when中,判断的条件可以更加的多样化
12# case_when,与SQL中的case...when...一样
13# 同 C语言 中的switch一样
14
15x <- c(1:10,NA)
16case_when(
17 x %% 2 == 0 ~ "偶",
18 x %% 2 == 1 ~ "奇",
19 TRUE ~ as.character(x)
20 #可以设置一个默认值
21)
22# "奇" "偶" "奇" "偶" "奇" "偶" "奇" "偶" "奇" "偶" NA

mutate 总结:

mutate 类似于SQL中,根据表的现有变量,生成新变量

R语言中,支持多种数据生成方式,使得实际应用中更加高效

下一篇,将探讨如何利用“ summarise ”,总结数据特性

——————————————

往期精彩:

数据整理—dplyr包(mutate系列) 天善智能 清华教授团队亲自授课,打造人人都能上手的 Python 课程 小程序

数据整理—dplyr包(mutate系列)

本文由R语言中文社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。

转载、引用前需联系作者,并署名作者且注明文章出处。

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。


以上所述就是小编给大家介绍的《数据整理—dplyr包(mutate系列)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

人人都是产品经理

人人都是产品经理

苏杰 / 电子工业出版社 / 2012-6 / 45.00元

本书为《人人都是产品经理》的升级版,是写给“1到3岁的产品经理”的书,适合刚入门的产品经理、产品规划师、需求分析师,以及对做产品感兴趣的学生,用户体验、市场运营、技术部门的朋友们,特别是互联网、软件行业。作为一名“4岁的产品经理”,作者讲述了过去3年的经历与体会,与前辈们的书不同,本书就像你走到作者身边,说“嗨,哥们!晚上有空吃个饭吗,随便聊聊做产品的事吧”,然后作者说“好啊”。 书名叫“......一起来看看 《人人都是产品经理》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器