r - 使用 lubridate 按特定天数过滤
问题描述
我有一个数据集,我想以 10 天为间隔进行分隔。例如,我想将 1 的所有日期放在26-12-2010
一起,而不是将 1 的下一个 10 天放在一起。我想为每个 做这个,并将 10 天的时间间隔编译成一个列表。04-01-2011
ID
ID
ID
library(lubridate)
date <- rep_len(seq(dmy("26-12-2010"), dmy("20-12-2013"), by = "days"), 500)
ID <- rep(seq(1, 5), 100)
df <- data.frame(date = date,
x = runif(length(date), min = 60000, max = 80000),
y = runif(length(date), min = 800000, max = 900000),
ID)
df %>%
mutate(interval = map(1:50, ~rep(.x, 10)) %>% reduce(c)) %>%
group_split(interval) %>%
map(~arrange(.x, ID)) %>%
map(~ group_split(.x, ID)) %>%
head(2)
)
使用最后几行代码时,它会破坏days
and ID
s 但假设在 10 天内的观察结果没有被组合在一起。
解决方案
昨天我很难理解你想要的输出,但我不知道你为什么不ID
先安排所有的 s。我希望这是您正在寻找的:
library(dplyr)
library(magrittr)
# slicing first 2 elements only
df %>%
arrange(ID) %>%
mutate(cut = data.table::rleid(cut(date, breaks = "10 day"))) %>%
group_split(ID, cut) %>%
extract(1:2)
[[1]]
# A tibble: 2 x 5
date x y ID cut
<date> <dbl> <dbl> <int> <int>
1 2010-12-26 73719. 803002. 1 1
2 2010-12-31 66825. 870527. 1 1
[[2]]
# A tibble: 2 x 5
date x y ID cut
<date> <dbl> <dbl> <int> <int>
1 2011-01-05 63023. 807545. 1 2
2 2011-01-10 76356. 875837. 1 2
推荐阅读
- php - 内联 if 内联 if 的奇怪行为
- reactjs - 仅当 React Redux 应用程序中的数据库发生更改时才从数据库中刷新状态
- python-3.7 - 安装 Python 3.7 时出错 - E:子进程 /usr/bin/dpkg 返回错误代码 (1)
- javascript - 将值从 div 传递到文本框
- google-maps - 如何使用 gmap3 添加叠加层?
- python - 将多个值添加到 Json 字符串
- android - firebase 自定义事件显示(未设置)值
- javascript - 如何在 Node js 中散列下载流
- excel - 使用 vba 更改日期格式
- linux-kernel - /proc 文件系统中的线程组领导名称是什么?