我有一个跟踪脚本生成的错误代码的数据框。每次执行脚本时,它都会将记录添加到大量CSV文件中。每次运行脚本时,event_id字段都是唯一的。每次运行可以添加CRITICAL,ERROR,WARNING,DIAGNOSTIC或INFORMATION消息的多种组合以及附带的值和附加信息(为简单起见,此处未表示)。
我需要总结CSV文件中每类错误的数量,但同一事件ID中的多个错误应该只计为一个错误。以下是数据结构的示例:
event_id | class | value
1 | ERROR | 5409
1 | ERROR | 5410
2 | WARNING | 212
3 | ERROR | 5409
3 | WARNING | 400
3 | DIAGNOSTIC | 64
这就是我想要的输出。即使有三个ERROR类事件,其中两个事件与同一事件相关联,因此它只计为一个事件。
class | count
ERROR | 2
WARNING | 2
DIAGNOSTIC | 1
我确实尝试过搜索,但甚至不知道要搜索哪些关键字。因此,即使您无法回答这个问题,我也会感谢您对搜索查询的任何帮助。
答案 0 :(得分:1)
df = read.table(header = T, sep = "|", text = "
event_id | class | value
1 | ERROR | 5409
1 | ERROR | 5410
2 | WARNING | 212
3 | ERROR | 5409
3 | WARNING | 400
3 | DIAGNOSTIC | 64")
df = as.data.table(df)
setkey(df, event_id, class)
unique(df)[, .N, by = class]
# class N
#1: ERROR 2
#2: WARNING 2
#3: DIAGNOSTIC 1
答案 1 :(得分:0)
您可以使用class
和event_id
变量构建二维表,使用pmin
将该值限制为1,然后使用rowSums
把它带回一维表:
rowSums(pmin(table(dat$class, dat$event_id), 1))
# DIAGNOSITIC ERROR WARNING
# 1 2 2
答案 2 :(得分:0)
您可以split
按事件ID分类然后创建数据框。
> s <- sapply(split(dat$event_id, dat$class), function(x) length(unique(x)))
> data.frame(count = s)
## count
## DIAGNOSTIC 1
## ERROR 2
## WARNING 2