r - 如何根据值的倍数循环(R)
问题描述
我有一组观察结果,包括巢穴 ID 和观察日期。我创建了一个变量,它给出了每个嵌套的每个观察值之间的间隔。我需要为每个巢创建一个新变量,为每个观察值分配一个唯一值,该值在 145 天的时间间隔内。本质上,我的数据的缩短版本如下所示:
Date Nest_ID interval total_interval
1 2015-02-22 a 0 0
2 2015-05-26 a 93 93
3 2015-07-08 a 43 136
4 2015-12-07 a 152 288
5 2016-01-29 a 53 341
6 2016-04-02 a 64 405
7 2016-07-06 a 95 500
8 2016-11-05 a 122 622
9 2017-06-29 b 0 0
10 2015-02-22 c 0 0
我需要它看起来像这样:
Date Nest_ID interval total_interval Nest_period
1 2015-02-22 a 0 0 1
2 2015-05-26 a 93 93 1
3 2015-07-08 a 43 136 1
4 2015-12-07 a 152 288 2
5 2016-01-29 a 53 341 2
6 2016-04-02 a 64 405 2
7 2016-07-06 a 95 500 3
8 2016-11-05 a 122 622 3
9 2017-06-29 b 0 0 1
10 2015-02-22 c 0 0 1
如果我可以让 total_interval 计数在达到 145 时重新启动,这似乎是理想的解决方案,但是我还没有弄清楚。
这是一些获取示例数据的代码:
Date <- c("2015-02-22", "2015-05-26", "2015-07-08", "2015-12-07", "2016-01-29", "2016-04-02", "2016-07-06", "2016-11-05", "2017-06-29", "2015-02-22")
Nest_ID <- c("a", "a", "a", "a", "a", "a", "a", "a", "b", "c")
interval <- (c(0,93,43,152,53,64,95,122,0,0))
total_interval <- (c(0,93,136,288,341,405,500,622,0,0))
df <- data.frame(Date, Nest_ID, interval, total_interval)
非常感谢任何帮助!谢谢!
解决方案
这很混乱,但我找不到简单的方法。
df <- df %>%
mutate(interval = as.numeric(interval),
total_interval = as.numeric(total_interval))
groups <- unique(df$Nest_ID)
res <- c()
for (i in groups){
df2 <- df %>%
filter(Nest_ID %in% i)
n <- 1
for(i in 1:dim(df2)[1]){
if (df2$total_interval[i] < 145) {
res<-c(res,n)
} else {
n <- n + 1
df2$total_interval <- df2$total_interval - df2$total_interval[i]
res<-c(res,n)
}
print(n)
}
}
res
df$idx <- replace_na(res, 1)
df
结果如下。idx
你Nest_period
想要吗
Date Nest_ID interval total_interval idx
1 2015-02-22 a 0 0 1
2 2015-05-26 a 93 93 1
3 2015-07-08 a 43 136 1
4 2015-12-07 a 152 288 2
5 2016-01-29 a 53 341 2
6 2016-04-02 a 64 405 2
7 2016-07-06 a 95 500 3
8 2016-11-05 a 122 622 3
9 2017-06-29 b 0 0 1
10 2015-02-22 c 0 0 1
推荐阅读
- dart - 如何在 Flutter TextField 中使用 BLOC 模式进行后端验证?
- android - 滚动在回收器视图列表项中不起作用
- r - 如何在 R 和 Shell 脚本中调用 Perl 变量?
- java - 循环一个数学方程
- javascript - 在角度 7 中从另一个视图(使用路由)单击更新按钮时更新表单
- google-app-engine - 无法将 gs:// 文件公开以直接从 Google 存储中提供服务
- sql-server - 如何查找更新记录的按列计数
- html - CSS:小屏幕上全宽的 div 不起作用
- tensorflow - ValueError:变量 bcnn1/W_conv2d 已存在,不允许。您的意思是在 VarScope 中设置 reuse=True 或 reuse=tf.AUTO_REUSE 吗?
- python - 如何在 Python 的条件语句中使用循环?