r - 如何在不使用 for 循环的情况下创建倒计时
问题描述
团队 - 感谢您的帮助。仅供参考 - 我花了最后几个小时试图找到一个不使用 for_loops 但我找不到的类似请求。
我有一个大型数据集,并且使用for
循环是时间限制的。我正在尝试建立一个倒计时列,它为我提供距离下一个事件的天数。下一个“假期”事件的开始是 0。当向后工作时,它应该增加。以下是当前和期望的两个数据集。我显然是手动填写了所需的$days_till。感谢您的任何提示/帮助。
#### Current data frame######
data <- data.frame(event = c("school", "school", "school", "vacation", "school", "school", "school", "school", "vacation"),
date = c("2020-01-01", "2020-01-02", "2020-01-03", "2020-01-04", "2020-01-05", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09"),
days_till = "")
#### Desired data frame######
desired <- data <- data.frame(event = c("school", "school", "school", "vacation", "school", "school", "school", "school", "vacation"),
date = c("2020-01-01", "2020-01-02", "2020-01-03", "2020-01-04", "2020-01-05", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09"),
days_till = c(3,2,1,0,4,3,2,1,0))
解决方案
这也可以
data <- data.frame(event = c("school", "school", "school", "vacation", "school", "school", "school", "school", "vacation"),
date = c("2020-01-01", "2020-01-02", "2020-01-03", "2020-01-04", "2020-01-05", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09"),
days_till = "")
#### Desired data frame######
desired <- data.frame(event = c("school", "school", "school", "vacation", "school", "school", "school", "school", "vacation"),
date = c("2020-01-01", "2020-01-02", "2020-01-03", "2020-01-04", "2020-01-05", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09"),
days_till = c(3,2,1,0,4,3,2,1,0))
library(dplyr)
#>
#> Attaching package: 'dplyr'
data %>% group_by(d = data.table::rleid(event)) %>%
mutate(date = as.Date(date),
days_till = ifelse(event == 'vacation', last(date) - date, last(date) - date +1)) %>%
ungroup() %>% select(-d)
#> # A tibble: 9 x 3
#> event date days_till
#> <chr> <date> <dbl>
#> 1 school 2020-01-01 3
#> 2 school 2020-01-02 2
#> 3 school 2020-01-03 1
#> 4 vacation 2020-01-04 0
#> 5 school 2020-01-05 4
#> 6 school 2020-01-06 3
#> 7 school 2020-01-07 2
#> 8 school 2020-01-08 1
#> 9 vacation 2020-01-09 0
由reprex 包于 2021-05-10 创建 (v2.0.0 )
推荐阅读
- nginx - nginx位置在/之后重写任何内容到root
- sql - SQL限制对另一个表的引用次数而不锁定
- html - 文本显示在弹出菜单顶部
- maven - 前端 maven 插件无法在 docker build 中安装 yarn
- algorithm - 逆向拓扑排序算法
- replace - 好的假设:如今的程序员在重构时会在全球范围内搜索和替换?
- mysql - SQL 写平均工资
- java - 使用字节数组java序列化克隆对象
- python - 如何使用 JSON 字符串作为凭据,而不是使用 Google API 的 Python 文件路径
- angularjs - Spring MVC 与 AngularJS 的完美结合?