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

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

数据整理—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系列)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Hacking

Hacking

Jon Erickson / No Starch Press / 2008-2-4 / USD 49.95

While other books merely show how to run existing exploits, Hacking: The Art of Exploitation broke ground as the first book to explain how hacking and software exploits work and how readers could deve......一起来看看 《Hacking》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

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

各进制数互转换器

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具