r - R 的 data.table 中的向量化函数
问题描述
问题:我尝试在下面的 data.table 对象中添加一列,其中每行将显示周列表。即,如果 START = "2020-01-01" 和 END = "2020-01-15",则周列应包含此时间间隔的相应周列表(2020 W01、2020 W02、2020 W03)。由于代码结构,我想保留单独准备数据的功能。但是,当前函数会导致错误。
问题:有没有办法让它保持简单,即在函数调用get_weeks
中不引用 data.table 对象?修改后的函数会是什么样子?干杯!
dt <- data.table(
ID = c(1, 2, 3),
START = c("2020-01-01", "2020-03-01", "2020-03-14"),
END = c("2020-01-15", "2020-03-12", "2020-03-26")
)
get_weeks <- function(start_date, end_date){
date_range <- c(start_date, end_date)
date_range <- ymd(date_range)
dt_range <- seq.Date(date_range[1], date_range[2], "day")
dt_range_week <- list(unique(format(as.Date(dt_range), "%G W%V")))
dt_range_week
}
dt[, weeks_for_filter_table := get_weeks("START", "END")]
解决方案
你可以使用Map
/ mapply
:
library(data.table)
dt[, weeks_for_filter_table := mapply(get_weeks, START, END)]
dt
# ID START END weeks_for_filter_table
#1: 1 2020-01-01 2020-01-15 2020 W01,2020 W02,2020 W03
#2: 2 2020-03-01 2020-03-12 2020 W09,2020 W10,2020 W11
#3: 3 2020-03-14 2020-03-26 2020 W11,2020 W12,2020 W13
推荐阅读
- android - 我收到“未附加到活动”错误
- javascript - 我想知道 Google 搜索自动完成功能的工作原理
- python - 使大型数据集的散点图成为可能 - Python
- c++ - 一行的输入搞砸了,代码都是相似的
- xml - 没有在管理服务器上显示 OSSEC 代理的实际 IP 地址
- r - ggplots2 geom_line 和 geom_point 的组合沿线创建了太多形状
- ruby-on-rails - Rails 新的初始化对象创建一个空记录
- asp.net-core - ASP.NET Core 3.1 如何重定向到 MicrosoftIdentity 提供的 AccountController 中包含的登录操作
- android - Google Play 问题:违反权限政策
- javascript - Pipedrive 网络表单未在反应引导模式中加载