使用来自另一个data.table的派生值来丰富data.table

时间:2016-07-06 16:40:17

标签: r join data.table

假设以下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的新手。

1 个答案:

答案 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中的所有观察值,并将相应的频率(如果有的话)绑定到它。