从数据帧中删除错误数据(相同的设备 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。
我正在提取具有设备 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。