首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >选择数据-第一项-第一项-固定期限(1年)R

选择数据-第一项-第一项-固定期限(1年)R
EN

Stack Overflow用户
提问于 2022-09-13 14:39:38
回答 2查看 37关注 0票数 2

我有一组个人的数据集,从每个人在不同的时间开始收集。

我需要从第一次输入数据开始的一年中对数据进行子集,如:myData[myDate >= "first entry" & myDate += "1 year"]

示例数据:

代码语言:javascript
运行
复制
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的数据和来自4/4/2010 - 3/28/2011的Sue等。实际的数据集有>20个样本,都是从不同的时间开始的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-13 14:47:00

使用tidyverselubridate函数的组合:

代码语言:javascript
运行
复制
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"))
票数 3
EN

Stack Overflow用户

发布于 2022-09-13 14:51:28

与马丁·C·阿诺德(MartinC.Arnold)的答案类似,我得到了另一个基于dplyrlubridate的答案。min(Dates) + years(1)意味着在最小日期的基础上再加上一年。

代码语言:javascript
运行
复制
library(dplyr)
library(lubridate)

df_date2 <- df_date %>%
  mutate(Dates = ymd(Dates)) %>%
  group_by(Name) %>%
  filter(Dates <= min(Dates) + years(1)) %>%
  ungroup()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73704912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档