[英]Improve a function to extract year, month and date of week
我想寫一個 wrap function ,我可以減少提取年、月和星期幾的步驟,這樣我就不必重復輸入日期變量名。 此外,如果我需要額外的季節性變量或其他時間 object 行,我可以在 function 中添加額外的行。
逐行方式是
library(lubridate)
yr = year(travel_date)
mth = months(travel_date)
day = weekdays(travel_date))
我可以通過dplyr
方式鏈接它們:
cat <- cat %>% mutate(yr = year(travel_date),
mth = months(travel_date),
day = weekdays(travel_date))
data.table
方式:
cat[, yr := year(travel_date)][, mnth := months(travel_date)][, dayweek := weekdays(travel_date)]
我的wrap function思路是只需要記一次dataframe的名字和變量名。 但它不起作用。
time_spin <- function(x, y) {
x[, yr := year(y)][,mth := months(y)][,day := weekdays(y)]
}
有什么建議我可以改進嗎? 我可以通過 function 到dplyr
或data.table
換行。
輸入
cat <- structure(list(id = 1:6,
travel_date = structure(c(16107L, 17266L, 16834L, 17953L, 17953L, 17953L),
class = c("IDate", "Date"))),
row.names = c(NA, -6L),
class = c("data.table", "data.frame"))
使用dplyr
可以將 function 寫成:
time_spin <- function(x, y) {
x %>% mutate(yr = year(.data[[y]]),
mth = months(.data[[y]]),
day = weekdays(.data[[y]]))
}
time_spin(cat, 'travel_date')
# id travel_date yr mth day
#1: 1 2014-02-06 2014 February Thursday
#2: 2 2017-04-10 2017 April Monday
#3: 3 2016-02-03 2016 February Wednesday
#4: 4 2019-02-26 2019 February Tuesday
#5: 5 2019-02-26 2019 February Tuesday
#6: 6 2019-02-26 2019 February Tuesday
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.