【发布时间】:2020-05-10 16:12:25
【问题描述】:
后面的讨论,我会参考下面的示例数据框:
现在,我希望实现的是对所有相似的数据包时间进行分组 - 即所有 7 秒、12 秒等。此外,PacketTime 字段应包含最小值和最大值的差异 (max(PacketTime) - min(PacketTime)) ,而FrameLen、IPLen 和TCPLen 字段应该是对应于分组时间的所有值的列表。例如对于 7s 组,FrameLen 将包含c(304, 276, 276)。
我的解决方法如下:
df <- packets %>%
group_by(round(PacketTime)) %>%
summarise(
PTime=max(PacketTime)-min(PacketTime),
FLen=list(FrameLen),
ILen=list(IPLen),
Movement=0
) %>%
rename(PacketTime=PTime) %>%
rename(FrameLen=FLen) %>%
rename(IPLen=ILen)
df$"round(PacketTime)" <- NULL # Remove the group_by
但是,其中一些交叉(即 1480 还包括 1481 的一部分)。这里的部分使这更容易(在某些方面)是每个组都由 5s 时间窗口分隔(通过 Python time.sleep(5))。
如何才能达到之前的结果,而只依靠组间的5s差异还考虑到交叉?
编辑:正如 Ben 所建议的,这是我的数据框 df[1:20,] 的 dput():
structure(list(PacketTime = c(7.083779, 7.147268, 7.147462, 12.084768,
12.153246, 12.153951, 17.095972, 17.159268, 17.159876, 22.11384,
22.176926, 22.177467, 27.134427, 27.199108, 27.200064, 32.144442,
32.208648, 32.20922, 37.144255, 37.205622), FrameLen = c(304L,
276L, 276L, 304L, 276L, 276L, 304L, 276L, 276L, 304L, 276L, 276L,
304L, 276L, 276L, 304L, 276L, 276L, 304L, 276L), IPLen = c(300L,
272L, 272L, 300L, 272L, 272L, 300L, 272L, 272L, 300L, 272L, 272L,
300L, 272L, 272L, 300L, 272L, 272L, 300L, 272L), TCPLen = c(260L,
232L, 232L, 260L, 232L, 232L, 260L, 232L, 232L, 260L, 232L, 232L,
260L, 232L, 232L, 260L, 232L, 232L, 260L, 232L), Movement = c(0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), row.names = c(NA,
20L), class = "data.frame")
【问题讨论】:
-
请先使用
dput()分享您的一些数据... -
@Ben 更新了 OP 以包含
dput()