算術(shù)運算符: +、 -、 *、 /、 ^
它們都是向量化的,使用所謂的“循環(huán)法則”。如果一個參數(shù)比另一個參數(shù)短,那么前
者會自動擴展到同樣的長度。當某個參數(shù)是單個數(shù)值時,這種方式是最有效的: air_
time / 60、 hours * 60 + minute 等。
算術(shù)運算符的另一用途是與我們后面將很快學到的聚集函數(shù)結(jié)合起來使用。例如, x /
sum(x) 可以計算出各個分量在總數(shù)中的比例, y – mean(y) 可以計算出分量與均值之間
的差值。
模運算符: %/% 和 %%
%/%(整數(shù)除法)和 %%(求余)滿足 x == y * (x %/% y) + (x %% y)。模運算非常好
用,因為它可以拆分整數(shù)。例如,在航班數(shù)據(jù)集中,你可以根據(jù) dep_time 計算出 hour
和 minute:
transmute(flights,
dep_time,
hour = dep_time %/% 100,
minute = dep_time %% 100
)
#> # A tibble: 336,776 × 3
#> dep_time hour minute
#> <int> <dbl> <dbl>
#> 1 517 5 17
#> 2 533 5 33
#> 3 542 5 42
#> 4 544 5 44
#> 5 554 5 54
#> 6 554 5 54
#> # ... with 3.368e+05 more rows
對數(shù)函數(shù): log()、 log2() 和 log10()
在處理取值范圍橫跨多個數(shù)量級的數(shù)據(jù)時,對數(shù)是特別有用的一種轉(zhuǎn)換方式。它還可以
將乘法轉(zhuǎn)換成加法,我們將在本書的第四部分中介紹這個功能。
其他條件相同的情況下,我推薦使用 log2() 函數(shù),因為很容易對其進行解釋:對數(shù)
標度的數(shù)值增加 1 個單位,意味著初始數(shù)值加倍;減少 1 個單位,則意味著初始數(shù)值
減半。
偏移函數(shù)
lead() 和 lag() 函數(shù)可以返回一個序列的領先值和滯后值。它們可以計算出序列的移動
差值(如 x – lag(x))或發(fā)現(xiàn)序列何時發(fā)生了變化(x != lag(x))。它們與 group_by()
組合使用時特別有用,你很快就會學到 group_by() 這個函數(shù):
(x <- 1:10)
#> [1] 1 2 3 4 5 6 7 8 9 10
lag(x)
#> [1] NA 1 2 3 4 5 6 7 8 9
lead(x)
#> [1] 2 3 4 5 6 7 8 9 10 N
R 提供了計算累加和、累加積、累加最小值和累加最大值的函數(shù): cumsum()、 cumprod()、
commin() 和 cummax(); dplyr 還提供了 cummean() 函數(shù)以計算累加均值。如果想要計算
滾動聚合(即滾動窗口求和),那么可以嘗試使用 RcppRoll 包:
x
#> [1] 1 2 3 4 5 6 7 8 9 10
cumsum(x)
#> [1] 1 3 6 10 15 21 28 36 45 55
cummean(x)
#> [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
邏輯比較: <、 <=、 >、 >= 和 !=
如果需要進行一系列復雜的邏輯運算,那么最好將中間結(jié)果保存在新變量中,這樣就可
以檢查是否每一步都符合預期。
排秩
排秩函數(shù)有很多,但你應該從 min_rank() 函數(shù)開始,它可以完成最常用的排秩任務
(如第一、第二、第三、第四)。默認的排秩方式是,最小的值獲得最前面的名次,使用
desc(x) 可以讓最大的值獲得最前面的名次:
y <- c(1, 2, 2, NA, 3, 4)
min_rank(y)
#> [1] 1 2 2 NA 4 5
min_rank(desc(y))
#> [1] 5 3 3 NA 2 1
如果 min_rank() 無法滿足需要,那么可以看一下其變體 row_number()、 dense_rank()、
percent_rank()、 cume_dist() 和 ntile()??梢圆榭此鼈兊膸椭撁嬉垣@得更多信息:
row_number(y)
#> [1] 1 2 3 NA 4 5
dense_rank(y)
#> [1] 1 2 2 NA 3 4
percent_rank(y)
#> [1] 0.00 0.25 0.25 NA 0.75 1.00
cume_dist(y)
#> [1] 0.2 0.6 0.6 NA 0.8 1.0








暫無數(shù)據(jù)