gpt4 book ai didi

r - 基于引用日期时间过滤、分类和创建新变量

转载 作者:行者123 更新时间:2023-12-04 07:43:13 25 4
gpt4 key购买 nike

我目前正在处理一个包含一些供水 jar 记录的数据集,该记录显示 日期 5 种不同储 jar 的技术检查 ( IDENT ) 以及 型号 记录的检查记录只有两个值“READ”,当油 jar 工作正常时,“ERROR”,否则性能不佳。


身份识别
日期
类型


X3
30/04/2021
错误

X1
1/05/2021


X1
2/05/2021
错误

X4
3/05/2021


X9
4/05/2021
错误

X6
5/05/2021


X1
6/05/2021


X3
7/05/2021
错误

X3
8/05/2021



我必须创建一个可以过滤和选择每个 TYPE="ERROR" 的数据框日期 对于每个水箱(是否没有错误记录在指定水箱的日期集上没有必要显示它)并显示最新的 TYPE="READ"日期 在每个坦克的 ERROR 之前以及最新的 日期 在每个坦克的错误日期之后,为了说明我要实现这个表:

| IDENT | READ_PRIOR |    ERROR   | POST_READ |
|:-----:|:----------:|:----------:|:---------:|
| X3 | NA | 30/04/2021 | 8/05/2021 |
| X3 | NA | 7/05/2021 | 8/05/2021 |
| X1 | 1/05/2021 | 2/05/2021 | 6/05/2021 |
| X9 | NA | 4/05/2021 | NA |
我尝试了什么?
我已经开始通过按日期按时间顺序排列数据集并使用 tidyverse 包按 IDENT 分组来解决这个问题,我也可以使用 top_n 函数为组选择最新的日期,但我的问题是我似乎无法找到一种方法在引用 TYPE="ERROR"之前和之后成功过滤或选择坦克的最新日期,这就是我撞到头的地方。非常感谢你帮助我把我真正感激的人。
代码:
df<- tibble::tribble(
~IDENT ~DATE ~TYPE,

"X3", "30/04/2021", "ERROR",

"X1", "1/05/2021", "READ",

"X1", "2/05/2021", "ERROR",

"X4", "3/05/2021", "READ",

"X9", "4/05/2021", "ERROR",

"X6", "5/05/2021", "READ",

"X1", "6/05/2021", "READ",

"X3", "7/05/2021", "ERROR",

"X3", "8/05/2021", "READ")

十分感谢大家!

最佳答案

我们将“日期”列转换为 Date类 ( dmy - 来自 lubridate), arrange 'IDENT' 和 'DATE' 的行,按 'IDENT' 分组,使用 case_when 将 'READ' 值重新编码为 'READ_PRIOR' 和 'POST_READ'基于'ERROR'的存在,删除'TYPE'中没有'ERROR'值的'IDENT'组,使用pivot_wider重新整形为'wide'格式和 fill 'POST_READ' 中的值与每个 'IDENT' 的非 NA 相邻值

library(dplyr)
library(tidyr)
library(data.table)
library(lubridate)
df %>%
mutate(DATE = dmy(DATE)) %>%
arrange(IDENT, DATE) %>%
group_by(IDENT) %>%
mutate(TYPE = case_when(TYPE == 'READ' & lead(TYPE) == 'ERROR'
~ 'READ_PRIOR', TYPE == 'READ' ~ 'POST_READ', TRUE ~ TYPE)) %>%
filter('ERROR' %in% TYPE) %>%
mutate(rn = rowid(IDENT, TYPE)) %>%
pivot_wider(names_from = TYPE, values_from = DATE) %>%
fill(POST_READ) %>%
ungroup %>%
select(-rn)
-输出
# A tibble: 4 x 4
# IDENT READ_PRIOR ERROR POST_READ
# <chr> <date> <date> <date>
#1 X1 2021-05-01 2021-05-02 2021-05-06
#2 X3 NA 2021-04-30 2021-05-08
#3 X3 NA 2021-05-07 2021-05-08
#4 X9 NA 2021-05-04 NA

关于r - 基于引用日期时间过滤、分类和创建新变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67339312/

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