如何使用 for 循环查找窗口大小中重复次数最多的数字



我有一个看起来像这样的数据框

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)))]
}

最新更新