我有一个关于一组个人的数据集,它是从每个人的不同时间开始收集的.

我需要设置自第一次输入后1年的数据子集,如下所示:myData[myDate >= "first entry" & myDate += "1 year"]

示例数据:

df_date <- data.frame( Name = c("Jim","Jim","Jim","Jim","Jim","Jim","Jim","Jim","Jim","Jim","Jim","Jim","Jim","Jim",
                                "Sue","Sue","Sue","Sue","Sue","Sue","Sue","Sue","Sue","Sue","Sue","Sue","Sue","Sue"),
                       Dates = c("2010-1-1", "2010-2-2", "2010-3-5","2010-4-17","2010-5-20",
                                 "2010-6-29","2010-7-6","2010-8-9","2010-9-16","2010-10-28","2010-11-16","2010-12-28","2011-1-16","2011-2-28",
                                 "2010-4-1", "2010-5-2", "2010-6-5","2010-7-17","2010-8-20",
                                 "2010-9-29","2010-10-6","2010-11-9","2012-12-16","2011-1-28","2011-2-28","2011-3-28","2011-2-28","2011-3-28"),
                       Event = c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1) )

期望的输出将是Jim将拥有来自1/1/2010 - 12/28/2010的数据,Sue将拥有来自4/4/2010 - 3/28/2011的数据,依此类推.实际的数据集有20个样本,都是在不同的时间开始的.

推荐答案

使用tidyverselubridate函数的组合:

library(tidyverse)
library(lubridate)

df_date %>%
  mutate(Dates = as_datetime(Dates)) %>%
  group_by(Name) %>%
  arrange(Dates, .by_group = T) %>%
  filter(Dates <= first(Dates) + duration(1, units = "year"))

R相关问答推荐

如何在列表的子元素上使用setName

R图中的字体大小和字体样式(带有R底图)

用单个表达匹配多个替代模式

如何替换R中数据集列中的各种字符串

在另一个函数中调用ggplot2美学

自动变更列表

在R中为马赛克图中的每个字段着色

如何优化向量的以下条件赋值?

从外部文件读取多个值作为字符向量

如何对2个列表元素的所有组合进行操作?

使用R中的正则表达式将一列分割为多列

当我们有多个反斜杠和/特殊字符时使用Gsubing

如何在R中通过多个变量创建交叉表?

如何将使用rhandsontable呈现的表值格式化为百分比,同时保留并显示完整的小数精度?

将箭头绘制在图形外部,而不是图形内部

在纵向数据集中创建新行

多元正态分布的计算

如何根据其他列中的两个条件来计算数据帧中的行之间的差异?

如何调整一个facet_work()面板内的框图和移动标签之间的水平宽度?

需要一个函数来在第一行创建一个新变量,然后用新变量替换一个不同的变量(对于多行)