假设以下data.tables;
> valid_event_rows
TTimeStamp DeviceIDI TimeOff AlarmGroup Alarmcode LogType idKey MailSend DownTime
1: 2011-09-15 11:46:39 4 2011-09-15 14:04:16 1 1111 0 791 1 138 mins
2: 2011-09-15 11:47:14 4 2011-09-15 14:04:15 1 1015 2 793 0 137 mins
3: 2011-09-15 11:47:37 4 2011-09-15 14:04:18 1 1001 2 794 0 137 mins
4: 2011-09-15 11:57:34 4 2011-09-15 13:57:42 1 7111 2 795 0 120 mins
5: 2011-09-15 14:58:43 4 2011-09-15 17:59:03 1 7111 2 795 0 181 mins
...
> observed_failures
Group AlarmCode Description ErrorType
1: System 916 HW-profile not selected 1
2: System 1001 Manual stop 1
3: System 1003 Emergency switch activated 1
4: System 1004 External stop 0
5: System 1005 Availability - low wind W
...
我的目标是使用新列observed_failures
扩展Frequency
表格,其中包含count()
表格中相应Alarmcode
的{{1}}。
通过解析第一个表并将所有出现次数计入新的DT valid_event_rows
,然后将failures_distribution
列绑定到所需的表中,我没有尝试这样做。
Frequency
然而这不起作用,因为# Generate a High Level view root cause of observed failures
observed_failures <- event_categories[Number %in% event_data$Alarmcode]
observed_failures <- observed_failures[order(Number, decreasing = FALSE)]
# Build a DF with AlarmCode | Frequency
failures_distribution <- (count(sort(valid_event_rows$Alarmcode)))
# Bind the Frequency column to the table
failures_summary <- cbind(observed_failures,failures_distribution$freq) # BUG (!!!)
colnames(failures_summary)[5] <- "Frequency"
上的某些事件(按设计)是重复的,因此将cbind值搞砸到频率映射。
我可以通过排序和删除event_categories
中的重复项来修复它,但我宁愿了解内联中最合适的方法。
请记住,我是R的新手。
答案 0 :(得分:1)
您可以尝试dplyr
尝试,count
在valid_event_rows中使用警报码,然后left_join
将这些频率发送到observed_failures:
library(dplyr)
frequencies <- count(valid_event_rows, AlarmCode)
failures_summary <- left_join(observed_failures, frequencies, on = 'AlarmCode')
解释魔法:count
计算data.frame中的行,按AlarmCode分组。输出是一个带有两个变量的新data.frame:'AlarmCode'和'n'。 left_join
然后使用on指定的变量加入data.frames,使用left_join保留observe_failures中的所有观察值,并将相应的频率(如果有的话)绑定到它。