问题:,我有以下函数,我想用更枯燥的方式编写它。你们中有人有建议如何改进这些功能吗?实际上,该函数接受一个date对象,并在其他列中提取星期、季度、月份和年份。
非常感谢!!
library(data.table)
library(tsibble)
determine_entry_date_aggregations <- function(data, date_col = "OBS_DATE"){
data[, ":="(entry_date_quarter = yearquarter(get(date_col)),
entry_date_week = format(get(date_col), "%G W%V"),
entry_date_month = yearmonth(get(date_col)),
entry_date_year = year(get(date_col)))]
}
determine_finish_date_aggregations <- function(data, date_col = "FIN_DATE"){
data[, ":="(finish_date_quarter = yearquarter(get(date_col)),
finish_date_week = format(get(date_col), "%G W%V"),
finish_date_month = yearmonth(get(date_col)),
finish_date_year = year(get(date_col)))]
}发布于 2020-05-06 08:21:18
这可能是风格的问题。下面是将函数存储在列表中并将date_col作为字符串传递给.SDcols的一个选项
funlist <- list(date_quarter=yearquarter,
date_week=function(x) format(x, "%G W%V"),
date_month=yearmonth,
date_year=year)
determine_date_aggregations <- function(data, date_col="FIN_DATE", out_col="finish"){
data[, paste(out_col, names(funlist), sep="_") :=
lapply(funlist, function(f) f(.SD[[1L]])), .SDcols=date_col]
}或者使用set代替:=
determine_date_aggregations <- function(data, date_col="FIN_DATE", out_col="finish") {
for (f in names(funlist)) {
set(data, j=paste(out_col, f, sep="_"),
value=funlist[[f]](data[[date_col]]))
}
}https://stackoverflow.com/questions/61630443
复制相似问题