从数据帧中删除错误数据(相同的设备 ID 和时间戳,2 个不同的值)

Removing bad data (same device ID and timestamp, 2 different values) from a dataframe

我正在提取具有设备 ID、时间戳和值的数据。在整个月的一天中的每个小时,我都会有很多不同的设备 ID 和数据点。如果我有两个具有相同 ID 和相同时间但值不同的数据,我如何删除两者中较低的(这只是坏数据)?或者,我可以在下面进一步执行此步骤。我不确定哪个会更容易。

这是我要处理的数据示例。

       ID        Time                   Value
1234   64058     2022-03-23 08:00:00    1014.98
1235   64059     2022-03-23 08:00:00    1001.34
1236   64060     2022-03-23 08:00:00    1001.52
1237   64061     2022-03-23 08:00:00    1483.11
1238   64062     2022-03-23 08:00:00    1342.23
1239   64063     2022-03-23 08:00:00    1201.34
1242   64058     2022-03-23 08:00:00    10.55

为了使数据更易于查看,我将其与另一个具有实际设备名称而不仅仅是 ID 的数据框合并,然后将其转换为更宽的格式。

av_device_merge <- merge(av_data, device_list, by.av_data = ID, by.device_list = ID) %>%  select(-c(ID)

pivoted <- av_device_merge %>% pivot_wider(names_from = Device_Short_Name, values_from = Value)

产生这个结果(仅以一小时为例):

Time                    Device 1              Device 2    Device 3    Device 4    Device 5    Device 6
2022-03-23 08:00:00     c(1014.98, 10.55)     1001.34     1001.52     1483.11     1342.23     1201.34
2022-03-23 09:00:00
...

这是我还可以查看每一列的部分,如果存在的数据是向量,则仅保留最大值并更改为数值。

两者哪个更容易做?我猜第一个选项?关于如何实现这个目标有什么想法吗?

提前致谢!

执行此操作的多种方法

data %>%
    group_by(ID, Time) %>%
    slice_max(n = 1, order_by = Value, with_ties = FALSE)

data %>%
    group_by(ID, Time)%>%
    top_n(1, wt = Value)

如果值相同,我更喜欢 slice_max 和 with_ties = FALSE。