iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0
AI/ ML & Data

資料科學的小筆記系列 第 9

Day9:使用dplyr轉換資料-Vectorized Functions(1)

  • 分享至 

  • xImage
  •  

正文

接續昨天,今天要來記錄與mutate()搭配的向量化函式(Vectorized Function):

lag():找出在向量的前一個數值
lead():找出在向量的後一個數值

先隨機生成2000年到2005的數值

scrambled <- slice_sample(
  tibble(year = 2000:2005, value = (0:5) ^ 2),
  prop = 1
)

https://ithelp.ithome.com.tw/upload/images/20240820/20168607TDqGcKe1cc.png

現在我想得出前一年的資料,該怎麼做呢?
先來個錯誤示範:

使用lag()去找出前一年的資料後,將結果以年份排列,會發現內容完全錯誤。

wrong <- mutate(scrambled, previous_year_value = lag(value))
arrange(wrong, year)

https://ithelp.ithome.com.tw/upload/images/20240820/20168607B8CJlyPnxa.png

這是因為一開始的資料內容,年份的順序是雜亂的,導致lag()的取值會不符合需求,因此在使用lag()時針對年份排列。

right <- mutate(scrambled, previous_year_value = lag(value, order_by = year))
arrange(right, year)

https://ithelp.ithome.com.tw/upload/images/20240820/20168607UE6TJWyhq0.png

要取下一年分的值就改用lead()~

right <- mutate(scrambled, next_year_value = lead(value, order_by = year))
arrange(right, year)

https://ithelp.ithome.com.tw/upload/images/20240820/20168607L4GfibAGH9.png

今天的小筆記就先到這邊,大家明天見~~

參考資料:

  1. Data transformation with dplyr :: Cheatsheet
  2. Compute lagged or leading values

上一篇
Day8:使用dplyr轉換資料-Manipulate Variables (3)
下一篇
Day10:使用dplyr轉換資料-Vectorized Functions(2)
系列文
資料科學的小筆記29
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
obarisk
iT邦研究生 1 級 ‧ 2024-08-22 10:10:01

應該是 window function 才對

至於實作有沒有滿足向量化,可能得看文件或是原始碼了

But,
dplyr 應該大多有向量化。(用c/c++實作)
如果沒有,那請考慮 data.table

我要留言

立即登入留言