如何解决改进提取年月日的功能
我想写一个 wrap 函数,可以减少提取年、月和星期几的步骤,这样我就不必反复记下日期变量名称。另外,如果我需要额外的季节性变量或其他时间对象线,我可以在函数中添加额外的线。
逐行方式
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 函数想法是我只需要放下数据框名称和变量名称一次。但它不起作用。
time_spin <- function(x,y) {
x[,yr := year(y)][,mth := months(y)][,day := weekdays(y)]
}
有什么建议可以改进吗?我可以通过 dplyr
或 data.table
获取换行功能。
输入
cat <- structure(list(id = 1:6,travel_date = structure(c(16107L,17266L,16834L,17953L,17953L),class = c("IDate","Date"))),row.names = c(NA,-6L),class = c("data.table","data.frame"))
解决方法
使用 dplyr
可以将函数编写为:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。