我有一个看起来像这样的数据框
Time DT5.0_Prediction
20:10:36.051 IST 3
20:10:36.150 IST 3
20:10:36.251 IST 3
20:10:36.350 IST 3
20:10:36.450 IST 3
20:10:36.551 IST 1
20:10:36.651 IST 1
20:10:36.750 IST 1
20:10:36.851 IST 3
20:10:36.952 IST 1
20:10:37.051 IST 1
20:10:37.151 IST 1
20:10:37.252 IST 1
20:10:37.351 IST 3
20:10:37.452 IST 1
20:10:37.551 IST 1
20:10:37.652 IST 1
20:10:37.752 IST 3
20:10:37.853 IST 1
20:10:37.953 IST 1
20:10:38.053 IST 1
20:10:38.152 IST 1
20:10:38.252 IST 1
20:10:38.352 IST 1
20:10:38.453 IST 1
20:10:38.554 IST 1
我想使用窗口大小 10 并让数据像这样
Starting Time Ending time Mode
20:10:36.051 IST 20:10:36.952 IST 3
20:10:37.051 IST 20:10:37.953 IST 1
20:10:38.053 IST 20:10:38.955 IST 1
等等
在上表中的模式列中,数字"3"是该特定窗口中重复的次数最多,"1"是下一个连续窗口中重复的次数最多。
我使用了以下代码
a <- 1
for(i in 1: length(mydata[,2])){
b <- a+99
mydata$StartTime [i] <- mydata$Time[a]
mydata$EndTime [i] <- mydata$Time[b]
mydata$mode1234567 [i] <- ifelse( b <= nrow(mydata),
count(mydata[a:min(b, nrow(mydata)),2]),
NA)
a <- b+1
}
使用频率和计数是错误的...
提前致谢
一种方法是每 10 行拆分一次,并根据每个元素创建一个数据框,即
do.call(rbind,
lapply(split(df, (0:nrow(df) %/% 10)), function(i)
data.frame(Starting_Time = i[1,1],
Ending_Time = i[nrow(i),1],
mode = Mode(i[[2]]))))
这给了,
Starting_Time Ending_Time mode 0 20:10:36.051_IST 20:10:36.952_IST 3 1 20:10:37.051_IST 20:10:37.953_IST 1 2 20:10:38.053_IST 20:10:38.554_IST 1
其中Mode
只是一个用于计算模式的自定义函数,取自此答案。
Mode <- function(x) {
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}