0、dplyr初始
由于R语言每一个步骤没有赋值的话,是不会改变原有的数据,都是建立一个新的数据。原有数据不改变。
dplyr::tbl_df(iris): 将数据转化为tbl类。只会显示适合屏幕大小的数据:dplyr::glimpse(iris): tbl数据的信息密集概括。 类似str()函数dplyr::%>%: 将左边的对象作为第一个参数(或参数 .)传递到右边的函数中。利用%>%进行“Piping”管道操作增强了代码的可读性,
> x %>% f(y) 相当于 f(x, y) > y %>% f(x, ., z) 相当于 f(x, y, z ) > ``` ## 1、filter 行过滤 - **`filter(iris, Sepal.Length > 7) `:**抽取符合逻辑条件的数据记录。 - **`distinct(iris) `:**删除重复记录。 distinct(iris, Species) 保留iris某一列的唯一值 - **`sample_frac(iris, 0.5, replace = TRUE) `:**随机选取部分数据(占总体的0.5)记录。 - **`sample_n(iris, 10, replace = TRUE) `:**随机选取n条数据记录。 - **`slice(iris, 10:15) `:**通过位置选取数据记录。 - **`top_n(storms, 2, date) `:**选取并排列前n条数据记录 (若为分组数据则按组排序) ## 2、select 列过滤rename(.data, …) rename_all(.tbl, .funs = list(), …) rename_if(.tbl, .predicate, .funs = list(), …) rename_at(.tbl, .vars, .funs = list(), …)
select(.data, …) select_all(.tbl, .funs = list(), …) select_if(.tbl, .predicate, .funs = list(), …) select_at(.tbl, .vars, .funs = list(), …)
```
Arguments
.tbl |
A tbl object. |
|---|---|
.funs |
A function fun, a purrr style lambda ~ fun(.) or a list of either form. |
... |
Additional arguments for the function calls in .funs. These are evaluated only once, with tidy dots support. 注意: .funs一般是一个函数列表,处理自变量之外,一般不知道额外参数,要指定额外参数,此时需要在这里特别指定. |
.predicate |
A predicate function to be applied to the columns or a logical vector. The variables for which .predicate is or returns TRUEare selected. This argument is passed torlang::as_function() and thus supports quosure-style lambda functions and strings representing function names.直译过来,指的是谓词函数, 必须是返回 ture or false 的逻辑函数. 像is.character,all,is.null等等. |
.vars |
A list of columns generated by vars(), a character vector of column names, a numeric vector of column positions, or NULL.可以用字符串 或者列索引(数字) 组成的列,匹配列名用 |
select(df, newname=a, b, c ): 通过列名或帮助函数选取列变量。 同时也可以对列名进行重命名。select(df, a:b): 选取在a和b之间的所有列(包含 a和b)select(df, -a): 选取除a以外的所有列
select(df,...,funs):df: 数据框funs:所用函数( 注意:: 一般不建议在选择列的同时,对列进行操作)
contains("."): 选取名称中含有字符的列。
starts_with("Sepal"):选取名称以指定字符串为首的列。ends_with("Length"):选取名称以指定字符串结尾的列。matches(".t."): 选取名称符合指定表达式规则的列。num_range("x", 1:5):选取名为x1、x2、x3、x4、x5的列。one_of(c("Species", "Genus")):选取名称在指定名字组内的列。 e.g.a:beg.-aeverything([ df ]): 列较多的情况下把不需要排序的列用evything()直接列出。当有df是返回1:df的列数,当为向量是返回1: 向量长度。 eg:select(iris,Species,everything())
select_if(df, <条件>, fun):对df数据集 选出满足条件为真的列执行fun。<条件>是对整个列属性进行判断筛选(真则保留,假则丢弃)。然后在对列名进行处理。funs是对列名进行筛选处理.- 注意: 当同时使用
<条件>, fun时,以条件为准,fun是对满足条件后的列的列名进行处理,不能对列进行进一步筛选。 select(df,...,funs)和select_if(df,<条件>)的区别select_if的条件是对列的属性进行筛选select中的funs函数是对列名进行筛选
select_at(.tbl, .vars, .funs = list(), ...)是对select_if的加强版select_at(mtcars, vars(-contains("ar"), starts_with("c"))可以看做是多个对列名多个条件的筛选。
3、mutate 添加新变量,组成新数据集。 原数据不改变 。
rename()重命列名 eg.rename(iris, petal_length = Petal.Length)rename_all(iris,funs(c(1:5)))或rename_all(iris,funs(c("A","B","C","D","E")))把整个列名都重新赋值rename_at(.tbl, .vars, .funs = list())rename_if(.tbl, .predicate, .funs = list())- 建议把参数
.vars=... , .funs = ...显示调用,不然函数会报错
mutate(mtcars, gpm = 1/mpg): 在原有数据的基础上添加新列(多列)组成新数据集。 原数据不改变 。transmute(mtcars, gpm = 1/mpg):直接创建一个新列(多列)组成新数据集。mutate_all(.tbl, .funs, …): 对每一列应用 funs,组成新数据集,mutate_at(.tbl, .vars, .funs, ..., .cols = NULL):对指定的列运行窗口函数,组成新数据,mutate_if(.tbl, .predicate, .funs, …):对指定类型的列运行窗口函数,组成新数据,
vars(): 表示需要进行概述的列.funs的用法- 建议显示调用改参数
.funs= - 直接在函数中写明需要运行的函数:
mutate_all(faithful, .funs(log)) - 结合funs写出调用的函数:
mutate_all(faithful, funs(log(.), log2(.)))- 运行两个以上函数,保留原数据的基础上增加新列,新列会自动根据函数名自动重命名
- 也可以自己重命名,:
mutate_all(faithful, funs(a=log(.), b= log2(.))) - 当funs只有一个时且自己进行重命名时,会保留原数据的基础上增加新列构成新数据,
mutate_all(faithful, funs(a=log2(.))) - mutate_if(car,is.character,as.factor )也可以直接省略括号
还可以把NULL赋值给列,已达到删除列的效果。
以下用法类似:
summarise_all(.tbl, .funs, ...)summarise_if(.tbl, .predicate, .funs, ...)summarise_at(.tbl, .vars, .funs, ..., .cols = NULL)mutate_all(.tbl, .funs, ...)mutate_if(.tbl, .predicate, .funs, ...)mutate_at(.tbl, .vars, .funs, ..., .cols = NULL)transmute_all(.tbl, .funs, ...)transmute_if(.tbl, .predicate, .funs, ...)transmute_at(.tbl, .vars, .funs, ..., .cols = NULL)窗体函数(.funs)
lead(x, n = 1L, default = NA, order_by = NULL, ...)lag(x, n = 1L, default = NA, order_by = NULL, ...)
lead和lag函数主要用于替换数据,lead表示整体向前替换,lag表示整体向后替换,n表示替换的个数,default表示要替换的结果,默认为NA 。order_by是根据某一列进行排序。
cume_dist(): 累积分布。dense_rank(): 无缝排序。min_rank(): 排序。并列时,其他序号顺延。ntile(): 把向量分为n份。percent_rank(): 把数据在[0, 1]中重组并排列。row_number(): 排序。并列时,位置在前的并列数 据序号在前。between(): 数值是否在a和b之间?cumall(): 累积all函数cumany(): 累积any函数cummean(): 累积mean函数cumsum(): 累积sum函数cummax(): 累积max函数cummin(): 累积 min函数cumprod(): 累积prod函数pmax(): 针对元素的max函数pmin(): 针对元素的min函数
4、概况数据(行),组成新数据集。 原数据不改变 。
summarise(iris, avg = mean(Sepal.Length))将数据概括为单行数值。summarise_all(.tbl, .funs, ...): 对每一列运行概述函数summarise_at(.tbl, .vars, .funs, ..., .cols=NULL):对指定的列运行概述函数summarise_if(.tbl, .predicate, .funs): 对指定类型的列运行概述函数
count(iris, Species, wt = Sepal.Length)计算各变量中每一个特定值的⾏行数(带权重或不带 权重).wt可选参数- 不带
wt时:对分组进行计数统计 - 带
wt时,对分组后的变量Sepal.Length进行求和统计
利用概述函数概括数据信息,输入数值向量而返回单一数值,如:
计数
length(x):返回一组向量(包括列表)或因子的长度nrow() / ncol():总行数/总列数n():返回观测行的行数,不能单独使用(可被用于summarise()、mutate()、filter())n_distinct(x, na.rm=FALSE):返回不重复的行数sum(!is.na()):计算非空值的行数
位置与序列
first(x)/last(x)向量的最后一个值。nth(x,n)返回向量的第n个值。
分布
IQR()向量的IQR(四分位距)。min() /max()向量中的最小(大)值。mean()向量中的均值。 mean(!is.na()) :非空值的均值median()向量中的中位数。var()向量中的⽅方差。sd()向量中的标准差。range()返回值域,即最大最小值colSums(x) / rowSums(x):各列/行求和colMeans(x) / rowMeans(x):各列/行求均值
##5、分组汇总
- group_by(.data, ..., add = FALSE)
ungroup(x, ...)
...: 表示用于分组的列名;
add= FALSE默认)
FALSE,表示会覆盖原来的分组,相当于对源数据重新分组;- 若为
TRUE,则不覆盖,相当于在原来的基础上在进行分组;
group_by(iris, Species)把在Species中的值相同的数据组合成行。
ungroup(iris)从数据框中移除组合信息。
iris %>% group_by(Species) %>% summarise(…)为每一个分组分别计算行概述。iris %>% group_by(Species) %>% mutate(…)按组计算新变量。同样也有
group_by_all(.tbl, .funs = list(), ...)
group_by_at(.tbl, .vars, .funs = list(), ..., .add = FALSE)
group_by_if(.tbl, .predicate, .funs = list(), ..., .add = FALSE)