gpt4 book ai didi

r - 只保留连续的观察

转载 作者:行者123 更新时间:2023-12-05 08:55:16 25 4
gpt4 key购买 nike

如标题所述,我有一个如下所示的 data.frame,

df<-data.frame('id'=c('1','1','1','1','1','1','1'),'time'=c('1998','2000','2001','2002','2003','2004','2007'))
df
id time
1 1 1998
2 1 2000
3 1 2001
4 1 2002
5 1 2003
6 1 2004
7 1 2007

还有一些其他情况的时间窗口比这更短或更长,仅供说明。

我想对这个数据集做两件事,首先,找到所有那些 id 在这里有至少五个连续观察,这可以通过以下解决方案来完成here .其次,我只想保留第一步选择的id至少连续五行 中的那些观察结果。理想的结果是:

df
id time
1 1 2000
2 1 2001
3 1 2002
4 1 2003
5 1 2004

我可以使用 for 循环和 diff 函数编写一个复杂的函数,但是如果我有一个更大的数据集并且有很多 if 编号。但这看起来不像 R,我相信应该有一个或两行的解决方案。

有人知道怎么实现吗?您的时间和知识将不胜感激。提前致谢。

最佳答案

可以使用dplyrid和连续时间进行分组,过滤少于5个条目的分组,即

#read data with stringsAsFactors = FALSE
df<-data.frame('id'=c('1','1','1','1','1','1','1'),
'time'=c('1998','2000','2001','2002','2003','2004','2007'),
stringsAsFactors = FALSE)

library(dplyr)

df %>%
mutate(time = as.integer(time)) %>%
group_by(id, grp = cumsum(c(1, diff(time) != 1))) %>%
filter(n() >= 5)

给出

# A tibble: 5 x 3
# Groups: id, grp [1]
id time grp
<chr> <int> <dbl>
1 1 2000 2
2 1 2001 2
3 1 2002 2
4 1 2003 2
5 1 2004 2

关于r - 只保留连续的观察,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46646537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com