r - 使用列的场合创建检测器使用表
问题描述
我需要创建一个检测器使用表,其中行是单个检测器,列是它们都处于活动状态的完整日期范围。在该表中,1 表示检测器在给定日期处于活动状态,0 表示检测器处于非活动状态。陷阱在由“站点”划定的组中被激活(例如站点:A1、B1、C1)。列中的连续日期范围需要从第一个陷阱处于活动状态的第一天开始,到最后一个陷阱处于活动状态的最后一天结束。
目前我有以下数据表可以使用
场地使用表:
> site.use.df
site first last
1: B1 1/11/2017 1/12/2017
2: B1 1/15/2017 1/16/2017
3: P1 1/7/2017 1/8/2017
4: P1 1/13/2017 1/14/2017
5: R1 1/10/2017 1/11/2017
6: R1 1/15/2017 1/16/2017
陷阱ID表:
> trapID.df
trapID site
1: 154 P1
2: 155 P1
3: 156 P1
4: 157 P1
5: 158 P1
6: 304 R1
7: 305 R1
8: 306 R1
9: 307 R1
10: 308 R1
11: 1 B1
12: 2 B1
13: 3 B1
14: 4 B1
15: 5 B1
理想情况下,完整的日期范围将从网站使用表中获取,而不是手动输入。
我正在寻找的最终产品将如下所示:
> detector.table
trapID site 1/7/2017 1/8/2017 1/9/2017 1/10/2017 1/11/2017 1/12/2017 1/13/2017 1/14/2017 1/15/2017 1/16/2017
1: 1 B1 0 0 0 0 1 1 0 0 1 1
2: 2 B1 0 0 0 0 1 1 0 0 1 1
3: 3 B1 0 0 0 0 1 1 0 0 1 1
4: 4 B1 0 0 0 0 1 1 0 0 1 1
5: 5 B1 0 0 0 0 1 1 0 0 1 1
6: 154 P1 1 1 0 0 0 0 1 1 0 0
7: 155 P1 1 1 0 0 0 0 1 1 0 0
8: 156 P1 1 1 0 0 0 0 1 1 0 0
9: 157 P1 1 1 0 0 0 0 1 1 0 0
10: 158 P1 1 1 0 0 0 0 1 1 0 0
11: 304 R1 0 0 0 1 1 0 0 0 1 1
12: 305 R1 0 0 0 1 1 0 0 0 1 1
13: 306 R1 0 0 0 1 1 0 0 0 1 1
14: 307 R1 0 0 0 1 1 0 0 0 1 1
15: 308 R1 0 0 0 1 1 0 0 0 1 1
解决方案
如果我对您的理解正确,使用我们可以在和列tidyverse
之间创建一系列日期,并以创建 1/0 列的宽格式获取数据。first
last
library(tidyverse)
temp <- trapID.df %>%
left_join(site.use.df) %>%
mutate_at(vars(first, last), mdy) %>%
mutate(date = map2(first, last, seq, by = "1 day")) %>%
unnest(date) %>%
select(-first, -last) %>%
mutate(present = 1) %>%
group_by(trapID, site) %>%
complete(date = seq(min(date), max(date), by = "1 day"),
fill = list(present = 0)) %>%
pivot_wider(names_from = date, values_from = present,
values_fill = list(present = 0))
#If you need data sorted by date
temp[c(names(temp)[1:2], sort(names(temp)[-(1:2)]))]
# trapID site `2017-01-07` `2017-01-08` `2017-01-09` `2017-01-10` `2017-01-11`
# <int> <fct> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 1 B1 0 0 0 0 1
# 2 2 B1 0 0 0 0 1
# 3 3 B1 0 0 0 0 1
# 4 4 B1 0 0 0 0 1
# 5 5 B1 0 0 0 0 1
# 6 154 P1 1 1 0 0 0
# 7 155 P1 1 1 0 0 0
# 8 156 P1 1 1 0 0 0
# 9 157 P1 1 1 0 0 0
#10 158 P1 1 1 0 0 0
#11 304 R1 0 0 0 1 1
#12 305 R1 0 0 0 1 1
#13 306 R1 0 0 0 1 1
#14 307 R1 0 0 0 1 1
#15 308 R1 0 0 0 1 1
# … with 5 more variables: `2017-01-12` <dbl>, `2017-01-13` <dbl>,
# `2017-01-14` <dbl>, `2017-01-15` <dbl>, `2017-01-16` <dbl>
推荐阅读
- sql - 添加外键约束时遇到问题(错误 ORA-02270:此列列表没有匹配的唯一键或主键)
- r - 在 scale_y_continuous 中使用非整数断点时,如何防止 ggplot 中的轴断点位置出现轻微错误?
- mysql - 为什么我每次都需要在 WHERE 子句中定义表名?
- error-handling - 自定义 Axios 处理错误
- matplotlib - 是否可以访问 NASM 中的过程链接表?
- python - TensorFlow 2.0 与 TensorFlow 1.0 不兼容的奇怪错误
- kubernetes - sqlproxy:将秘密注入 sqlproxy.cnf
- categories - 如何从 Discord.js 中的类别名称获取类别 ID
- vba - 搜索表单不适用于前端数据库
- django - 使用 nginx 和 Gunicorn 运行时,Django 标准输出输出到哪里?