dplyr包实用总结之mutate系列

Posted cobby-baby

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dplyr包实用总结之mutate系列相关的知识,希望对你有一定的参考价值。

dplyr包实用总结之mutate系列

mutate系列

mutate_if

mutate_if():转换由谓词函数(一个判断式,一个返回bool值的函数或者仿函数)选择的特定列

谓词函数,也叫判断函数(predicate function)

mutate_if()转换数据类型,挺方便的

# 将所有因子列转化成字符
my_data %>% mutate_if(is.factor, as.character)
# 将左右数字列四舍五入
my_data %>% mutate_if(is.numeric, round, digits = 0)	

mutate_if()应用于多个转换(Multiple transformations)

此时需要通过函数的list来传递,会创建新的变量名,一般是在需要修改的变量后加 _函数名的字样

scale2 <- function(x, na.rm = FALSE) (x - mean(x, na.rm = na.rm)) / sd(x, na.rm)
iris %>% mutate_if(is.numeric, list(scale2, log))

如果list里只有一个函数,它会直接修改已经存在的变量(in place),这时可以给它一个新的变量名则创建新的变量

iris %>% mutate_if(is.numeric, list(scale2))
iris %>% mutate_if(is.numeric, list(scale = scale2))

当然也可以使用purrr-style的公式

iris %>% mutate_if(is.numeric, list(~scale2(.), ~log(.)))

如果新的变量名也能修改,特别是与原变量会重合的时候

iris %>% mutate_if(is.numeric, list(scale = scale2, log = log))

mutate_at

将函数应用于使用字符向量选择的特定列

starwars %>% mutate_at(c("height", "mass"), scale2)

传递额外的参数

starwars %>% mutate_at(c("height", "mass"), scale2, na.rm = TRUE)

使用purrr-style

starwars %>% mutate_at(c("height", "mass"), ~scale2(., na.rm = TRUE))

可以在选择变量的时候,使用一下简单帮助函数来筛选,不过要记得使用vars(),vars()作用是选择变量。

iris %>% mutate_at(vars(matches("Sepal")), log)

其他常用的小函数

组装

bind_rows()

bind_cols() :将多个data frame合成单个data frame

data_frame() : 将一系列列向量组合成data frame

as_data_frame() :将list转换成data frame

以上是关于dplyr包实用总结之mutate系列的主要内容,如果未能解决你的问题,请参考以下文章

R语言dplyr包使用mutate函数生成新的数据列(不改变原数据列)实战

R语言dplyr包使用dplyr函数使用group_by函数summarise函数和mutate函数计算分组占比实战

R语言dplyr包mutate_if函数修改所有满足条件的数据列的内容实战

R语言dplyr包mutate_at函数通过名称修改指定数据列的内容(使用统一的函数)实战

R语言dplyr包mutate_all函数一次性处理所有的数据列的内容(使用统一的函数)实战

使用dplyr :: mutate后,为什么给定的属性会消失?