首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将观测值与r中的结束日期合并

如何将观测值与r中的结束日期合并
EN

Stack Overflow用户
提问于 2022-09-19 13:51:27
回答 1查看 29关注 0票数 1

我有一个数据库,每6个月测试一次牛群中的动物(动物的数量会随着时间的推移而变化)。问题是,牛群中的所有动物不是在同一天进行测试,而是在2个月的时间内进行测试。

我想知道我可以创建一个新的列,它合并了所有这些结束日期(按群分组),这样我就可以计算出一个羊群被测试的次数。

这是一个例子,一群已经测试了8次,但在不同的日期。每一个点代表一个动物:

以下是数据的一个示例:

代码语言:javascript
复制
df <- data.frame(
        animal = c("Animal1", "Animal2", "Animal3", "Animal4", "Animal5", "Animal6", "Animal1", "Animal2", "Animal3", "Animal4", "Animal5", "Animal6", "Animal7", "Animal8", "Animal9", "Animal10", "Animal11", "Animal12", "Animal7", "Animal8", "Animal9", "Animal10", "Animal11", "Animal12"),
        herd = c("Herd1","Herd1","Herd1", "Herd1","Herd1","Herd1", "Herd1","Herd1","Herd1", "Herd1","Herd1","Herd1","Herd2","Herd2", "Herd2","Herd2","Herd2","Herd2", "Herd2","Herd2", "Herd2","Herd2","Herd2","Herd2"),
        date = c("2017-01-01", "2017-01-01", "2017-01-17","2017-02-04", "2017-02-04", "2017-02-05", "2017-06-01" , "2017-06-03", "2017-07-01", "2017-06-21", "2017-06-01", "2017-06-15", "2017-02-01", "2017-02-01", "2017-02-15", "2017-02-21", "2017-03-05", "2017-03-01", "2017-07-01", "2017-07-01", "2017-07-15", "2017-07-21", "2017-08-05", "2017-08-01"))

因此,预期的结果将是:

代码语言:javascript
复制
     animal  herd       date  testing
1   Animal1 Herd1 2017-01-01  1
2   Animal2 Herd1 2017-01-01  1
3   Animal3 Herd1 2017-01-17  1
4   Animal4 Herd1 2017-02-04  1
5   Animal5 Herd1 2017-02-04  1
6   Animal6 Herd1 2017-02-05  1
7   Animal1 Herd1 2017-06-01  2
8   Animal2 Herd1 2017-06-03  2
9   Animal3 Herd1 2017-07-01  2
10  Animal4 Herd1 2017-06-21  2
11  Animal5 Herd1 2017-06-01  2
12  Animal6 Herd1 2017-06-15  2
13  Animal7 Herd2 2017-02-01  1
14  Animal8 Herd2 2017-02-01  1
15  Animal9 Herd2 2017-02-15  1
16 Animal10 Herd2 2017-02-21  1
17 Animal11 Herd2 2017-03-05  1
18 Animal12 Herd2 2017-03-01  1
19  Animal7 Herd2 2017-07-01  2
20  Animal8 Herd2 2017-07-01  2
21  Animal9 Herd2 2017-07-15  2
22 Animal10 Herd2 2017-07-21  2
23 Animal11 Herd2 2017-08-05  2
24 Animal12 Herd2 2017-08-01  2

我想应用这样的方法,但是考虑到彼此关闭的日期是相同的测试。

代码语言:javascript
复制
df %>% 
  group_by(herd) %>% 
  mutate(testing = dense_rank(date))

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2022-09-19 14:03:18

您可以每5个月使用一次group_by并应用dense_rank。因为你最小的两个日期之间的差距来自同一动物是5个月,单位必须是5个月。

代码语言:javascript
复制
library(dplyr)
library(lubridate)
df %>% 
  group_by(testing = dense_rank(floor_date(ymd(date), unit = "5 months")))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73774482

复制
相关文章

相似问题

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