接上篇!
library(dplyr)
替换/重编码操作是对数据框中的部分元素进行改动。
recode
函数用于原子向量中的元素替换
文本型元素的替换:
txt <- c(LETTERS[1:3], 1:2)
txt
## [1] "A" "B" "C" "1" "2"
recode(txt, "A" = "Apple", "B" = "Big")
## [1] "Apple" "Big" "C" "1" "2"
recode(txt, "1" = "10")
## [1] "A" "B" "C" "10" "2"
数值型元素的替换:
num <- c(1:5)
recode(num, `5` = 50L)
## [1] 1 2 3 4 50
recode_factor
在替换后将原子向量转为因子类型
recode_factor(num, `5` = 50L)
## [1] 1 2 3 4 50
## Levels: 50 1 2 3 4
na_if
函数用于将元素替换成缺失值NA
na_if(x, y)
x:原子向量
y:待替换的元素或向量。
参数y的长度为1时:
x <- c(1:5)
na_if(x, 4)
## [1] 1 2 3 NA 5
参数y的长度与参数x相等时,二者对应位置的元素相等时替换成NA
:
y <- c(5:1)
na_if(x, y)
## [1] 1 2 NA 4 5
coalesce
用于替换缺失值NA
x <- c(1:3, NA, 5:6, NA)
coalesce(x, 4)
## [1] 1 2 3 4 5 6 4
y <- 1:7
coalesce(x, y)
## [1] 1 2 3 4 5 6 7
R语言中的数学运算函数已由base
和stats
工具包提供,dplyr
中的函数只是对其做了一些补充。
cummean
函数为累平均运算
x <- 1:6
cummean(x)
## [1] 1.0 1.5 2.0 2.5 3.0 3.5
base
包中有cumsum
、cumman
、cummin
等函数。
cumall
函数为all
函数的累加形式
all(x < 5)
## [1] FALSE
cumall(x < 5)
## [1] TRUE TRUE TRUE TRUE FALSE FALSE
cumany
函数为any
函数的累加形式
any(x > 5)
## [1] TRUE
cumany(x >= 5)
## [1] FALSE FALSE FALSE FALSE TRUE TRUE
lag
函数计算数据序列的滞后值
x <- 1:6
lag(x)
## [1] NA 1 2 3 4 5
lag(x, n = 2L)
## [1] NA NA 1 2 3 4
lead函数计算数据序列的前进值
lead(x)
## [1] 2 3 4 5 6 NA
lead(x, n = 2L)
## [1] 3 4 5 6 NA NA
intersect
、union
、setdiff
函数分别用于计算交集、并集、补集
x <- c(1,2,4,6)
y <- c(2:7)
intersect(x, y)
## [1] 2 4 6
union(x, y)
## [1] 1 2 4 6 3 5 7
setdiff(y, x)
## [1] 3 5 7
union_all
函数取交集时不剔除重复值,相当于向量合并
union_all(x, y)
## [1] 1 2 4 6 2 3 4 5 6 7
提取操作是根据索引index提取向量中的元素或数据框中的变量。
first
、last
函数分别用于提取第一个和最后一个元素
x <- c(5, 1, 3, 2, 2, NA)
first(x)
last(x)
nth
函数用于提取第n个元素
nth(x, n = 3)
pull
函数用于提取数据框的某个变量
pull(.data, var = -1, name = NULL, ...)
默认提取最后一个变量:
pull(mtcars)
参数var根据变量顺序进行提取,正数表示从前往后,负数表示从后往前:
pull(mtcars, var = 2)
pull(mtcars, var = -2)
参数name根据变量名提取,参数名可省略:
pull(mtcars, name = disp)
pull(mtcars, disp)
这类函数主要是对逻辑运算的代码进行简化。
between
函数判断数值是否在某闭区间内
between(x, left, right)
between(1:5, 2, 4)
## [1] FALSE TRUE TRUE TRUE FALSE
setequal
函数用于判断数值是否相等
setequal(5, 5)
## [1] TRUE
setequal(pi, 3.14)
## [1] FALSE
near
函数用于判断数值是否近似相等
near(pi, 3.14, tol = 0.01)
## [1] TRUE
near(pi, 3.14, tol = 0.001)
## [1] FALSE
if_else
函数是if-else条件句的简化版,对标于base
包中的ifelse
函数
if_else(1:5 < 3, 0, 1)
## [1] 0 0 1 1 1
case_when
函数是多重if条件句的简化版
该函数越靠前的条件优先级越高,即后续条件不会改变前面条件的结果。
x <- c(1:20)
case_when(
x %% 3 == 0 ~ "3的倍数",
x %% 2 == 0 ~ "偶数",
x %% 2 == 1 ~ "奇数"
)
## [1] "奇数" "偶数" "3的倍数" "偶数" "奇数" "3的倍数" "奇数"
## [8] "偶数" "3的倍数" "偶数" "奇数" "3的倍数" "奇数" "偶数"
## [15] "3的倍数" "偶数" "奇数" "3的倍数" "奇数" "偶数"
由于在使用管道操作符%>%
编写代码时,中间过程没有新的环境变量生成,因此不能直接对其引用,这时可以使用dplyr
工具包中的环境函数加以指代。
n
:当前分组的样本个数
cur_data
:当前数据框,不包含分类(组)变量
cur_data_all
:当前数据框,包含分类(组)变量
cur_group
:当前分类(组)变量
cur_group_id
:当前分组的序号编码
cur_group_rows
:当前的行序号
cur_column
:当前列名,仅在across
函数内使用
dta <- group_by(mtcars, cyl)
dta %>% summarise(data = list(cur_data()))
## # A tibble: 3 x 2
## cyl data
## *
## 1 4
## 2 6
## 3 8
dta %>% mutate(var = list(cur_group()))
## # A tibble: 32 x 12
## # Groups: cyl [3]
## mpg cyl disp hp drat wt qsec vs am gear carb var
##
## 1 21 6 160 110 3.9 2.62 16.5 0 1 4 4
dta %>% mutate(var = mpg * cur_group_rows())
## # A tibble: 32 x 12
## # Groups: cyl [3]
## mpg cyl disp hp drat wt qsec vs am gear carb var
##
## 1 21 6 160 110 3.9 2.62 16.5 0 1 4 4 21
## 2 21 6 160 110 3.9 2.88 17.0 0 1 4 4 42
## 3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1 68.4
## 4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1 85.6
## 5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2 93.5
## 6 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1 109.
## 7 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4 100.
## 8 24.4 4 147. 62 3.69 3.19 20 1 0 4 2 195.
## 9 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2 205.
## 10 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4 192
## # ... with 22 more rows
往期推荐阅读:
《数据处理通识》专辑-base | 使用apply族函数进行向量化运算
《制表与可视化》专辑-ggplot2 | ggplot2作图语法入门
《数学模型》专辑-car | 线性回归(三)——残差分析和异常点检验
《地理计算与分析》专辑-spdep | 如何在R语言中计算空间自相关指数