在R中,如何确定列中的哪个日期最接近预先指定的日期?

发布于 2025-01-18 13:24:45 字数 277 浏览 2 评论 0原文

我有一个数据集,我正在尝试找到“ 2021-08-02”的壁橱日期,而无需前进。因此,在下面的示例数据集中,我希望它在'2021-08-05'之前过滤掉所有内容,因为那是最近的日期,而无需更早。

library(dplyr)
test <- tibble(Day = seq(as.Date("2021-08-01"), as.Date("2021-09-10"), by="4 days"),
                Score = c(sample(1:15, 11)))

I have a dataset and I'm trying to find the closet date to '2021-08-02' without going before it. So, in my sample dataset below, I want it to filter out everything before '2021-08-05' since that is the nearest date without going sooner.

library(dplyr)
test <- tibble(Day = seq(as.Date("2021-08-01"), as.Date("2021-09-10"), by="4 days"),
                Score = c(sample(1:15, 11)))

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

七分※倦醒 2025-01-25 13:24:45

获取它们之间的绝对差,找到最小索引,然后返回序列

library(dplyr)
date <- as.Date('2021-08-02')
test %>% 
   slice(seq_len(which.min(abs(date - Day))))

-output

# A tibble: 1 × 2
  Day        Score
  <date>     <int>
1 2021-08-01    11

如果我们想返回另一组行,可以在slice 步骤或使用 row_number() 创建条件

test %>% 
   filter(row_number() > seq_len(which.min(abs(date - Day))))
# A tibble: 10 × 2
   Day        Score
   <date>     <int>
 1 2021-08-05     9
 2 2021-08-09    12
 3 2021-08-13    13
 4 2021-08-17     6
 5 2021-08-21     4
 6 2021-08-25     1
 7 2021-08-29    10
 8 2021-09-02     3
 9 2021-09-06     7
10 2021-09-10     8

Get the absolute difference between them, find the minimum index, and return the sequence

library(dplyr)
date <- as.Date('2021-08-02')
test %>% 
   slice(seq_len(which.min(abs(date - Day))))

-output

# A tibble: 1 × 2
  Day        Score
  <date>     <int>
1 2021-08-01    11

If we want to return the other set of rows, either use %>% anti_join(df, .) after the slice step or create a condition with row_number()

test %>% 
   filter(row_number() > seq_len(which.min(abs(date - Day))))
# A tibble: 10 × 2
   Day        Score
   <date>     <int>
 1 2021-08-05     9
 2 2021-08-09    12
 3 2021-08-13    13
 4 2021-08-17     6
 5 2021-08-21     4
 6 2021-08-25     1
 7 2021-08-29    10
 8 2021-09-02     3
 9 2021-09-06     7
10 2021-09-10     8
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文