r - 以两个日期之间的最小差异为条件的数据框子集
问题描述
我有一个包含 4 个变量的数据框:id、measurement、date_a、date_b。
单个 id 可以多次对 df 做出贡献。我想对这个数据框进行子集化,以便每个 id 只包含一个测量值。我想根据 date_b 和 date_a 之间的最小差异为每个 id 选择一行,但是这个最小差异至少需要一年。有没有办法使用 dplyr 使用一行代码来做到这一点,而不是为日期差异创建一个新变量?
解决方案
这里有一些假数据。(最佳做法是在您的问题中包含这样的内容,以避免对您的特定情况产生歧义或误解。)
set.seed(8601)
df <- data.frame(
id = rep(1:3, each = 5),
measurement = "foo",
date_a = as.Date(sample(1:3000, 15), origin = "2010-01-01")
)
df$date_b <- df$date_a + sample(1:1000, 15)
这是使用 dplyr 的一种略长于单行的方法:
library(dplyr)
df %>% group_by(id) %>% filter(date_b-date_a >= 365) %>% filter(date_b-date_a == min(date_b-date_a))
结果:
# A tibble: 3 x 4
# Groups: id [3]
id measurement date_a date_b
<int> <fct> <date> <date>
1 1 foo 2013-06-13 2014-11-26
2 2 foo 2014-10-05 2017-04-14
3 3 foo 2012-01-07 2014-02-11
推荐阅读
- excel - Excel 和时间字段比较
- sql - Microsoft Access:错误消息行大小太大
- jsxgraph - 在一组对象中,Segment 不移动
- c++ - 为什么这个并发代码比另一个(都是 C++)慢?
- r - 合并标准 Eurobarometer 的多个数据集
- c# - 如何将数组中的元素与在c#中按顺序输入到文本框中的元素进行比较?
- angular - 添加评论时,基本组件的角度依赖注入失败
- python - 如何通过存储在不同 .json 文件中的键来分隔 .json 文件?
- javascript - 函数读取给定节点的所有属性的问题
- html - Angular 11 在 HTML 中填充输入