r - 分组并计算(第一和第二)和(第一和第三)之间的天数发生在R中的id
问题描述
我如何分组和计算(第一和第二)和(第一和第三)之间的天数在 R 中发生了一个 id,例如我有以下数据框:
CRASH_DATE geoid CRASH_TIME type
2015-12-10 123 1650 Fatal_i
2015-12-06 156 1722 Fatal_i
2015-12-10 123 1956 Fatal_i
2015-11-29 156 705 Fatal_i
2015-11-21 156 1756 Fatal_i
2015-12-10 123 1936 Fatal_i
2015-11-19 156 712 Fatal_i
2015-11-21 112 1706 Fatal_i
...
我想要一个输出,例如:
geoid days_between(1,2) days_between(1,3)
123 0 0
156 2 10
112 Nan Nan
...
这是我的代码:
dt2 <- data.table(table)
dt22 <- dt2[,list(diff1 = CRASH_DATE - shift(CRASH_TIME, fill =
first(CRASH_TIME)),diff2 = CRASH_DATE - shift(CRASH_TIME, fill =
first(CRASH_TIME))),by = c("geoid")]
但这是错误的。
解决方案
df = read.table(text = "
CRASH_DATE geoid CRASH_TIME type
2015-12-10 123 1650 Fatal_i
2015-12-06 156 1722 Fatal_i
2015-12-10 123 1956 Fatal_i
2015-11-29 156 705 Fatal_i
2015-11-21 156 1756 Fatal_i
2015-12-10 123 1936 Fatal_i
2015-11-19 156 712 Fatal_i
2015-11-21 112 1706 Fatal_i
", header=T)
library(dplyr)
library(lubridate)
df %>%
mutate(CRASH_DATE = ymd(CRASH_DATE)) %>% # update to date variable (if needed)
arrange(CRASH_DATE) %>%
group_by(geoid) %>%
summarise(days_between_1_2 = as.numeric(CRASH_DATE[2] - CRASH_DATE[1]),
days_between_1_3 = as.numeric(CRASH_DATE[3] - CRASH_DATE[1]))
# # A tibble: 3 x 3
# geoid days_between_1_2 days_between_1_3
# <int> <dbl> <dbl>
# 1 112 NA NA
# 2 123 0 0
# 3 156 2 10
推荐阅读
- ajax - 加载形式 Fragment thymelef ajax spring boot
- blockchain - 如何通过 RPC 获取以太坊内部交易列表/合约交易列表?
- amazon-web-services - 如何为 AWS 实例添加 AWS 入站限制
- jquery - 如何删除默认显示在标签之间的所有空白
- graphql - 如何设置 Apollo GraphQL 服务器以接受一个对象作为突变的变量?
- sql - 过滤 json 值,而不考虑 PostgreSQL 中的键
- r - 没有从网络抓取中将值输入到数据框中
- python-3.x - onvif 从 ip-camera 检索日志文件
- node.js - Express 服务器重定向到 React 路由器 404 未找到
- java - Java 扫描器类从文本文件中读取制表符分隔的字符串