R 跨布尔值扫描窗口,返回最大窗口

R 跨布尔值扫描窗口,返回最大窗口,r,R,我有一份参与者名单,每个人有10次测量。为每个测量场合指定一个布尔值。我想扫描“boolean”列,一次扫描4个测量值(1->4,2->5,3->6,等等)。我想找出哪个窗口中的“1”值最大,结果存储在“MaxWindow”列中 下面提供了其外观的示例: 注意:如果可以在多个窗口中观察到最大值,我只想在扫描中取最远的窗口 非常感谢您的帮助。您可以使用zoo中的rollsumr获取特定窗口大小的滚动总和,并使用选择最后一个最大值,该值+max为每个参与者创建maxwindow列 library(

我有一份参与者名单,每个人有10次测量。为每个测量场合指定一个布尔值。我想扫描“boolean”列,一次扫描4个测量值(1->4,2->5,3->6,等等)。我想找出哪个窗口中的“1”值最大,结果存储在“MaxWindow”列中

下面提供了其外观的示例:

注意:如果可以在多个窗口中观察到最大值,我只想在扫描中取最远的窗口


非常感谢您的帮助。

您可以使用
zoo
中的
rollsumr
获取特定窗口大小的滚动总和,并使用
选择最后一个最大值,该值
+
max
为每个
参与者创建
maxwindow

library(dplyr)

win_size <- 4

df %>%
  group_by(Participant) %>%
  mutate(sum = zoo::rollsumr(Boolean, win_size, fill = NA), 
         maxwindow = {i <- max(which(sum == max(sum, na.rm = TRUE)));
                      paste(i - win_size + 1, i, sep = '-')})

#   Participant Measurmeant Boolean   sum maxwindow
#         <dbl>       <int>   <dbl> <dbl> <chr>    
# 1           1           1       1    NA 5-8      
# 2           1           2       1    NA 5-8      
# 3           1           3       0    NA 5-8      
# 4           1           4       0     2 5-8      
# 5           1           5       1     2 5-8      
# 6           1           6       1     2 5-8      
# 7           1           7       1     3 5-8      
# 8           1           8       0     3 5-8      
# 9           1           9       0     2 5-8      
#10           1          10       0     1 5-8      
库(dplyr)
win_大小%
分组依据(参与者)%>%
mutate(sum=zoo::rollsumr(布尔,win_size,fill=NA),

maxwindow={i您可以使用
zoo
中的
rollsumr
获取特定窗口大小的滚动和,并使用
选择最后一个最大值,该值
+
max
为每个
参与者创建
maxwindow

library(dplyr)

win_size <- 4

df %>%
  group_by(Participant) %>%
  mutate(sum = zoo::rollsumr(Boolean, win_size, fill = NA), 
         maxwindow = {i <- max(which(sum == max(sum, na.rm = TRUE)));
                      paste(i - win_size + 1, i, sep = '-')})

#   Participant Measurmeant Boolean   sum maxwindow
#         <dbl>       <int>   <dbl> <dbl> <chr>    
# 1           1           1       1    NA 5-8      
# 2           1           2       1    NA 5-8      
# 3           1           3       0    NA 5-8      
# 4           1           4       0     2 5-8      
# 5           1           5       1     2 5-8      
# 6           1           6       1     2 5-8      
# 7           1           7       1     3 5-8      
# 8           1           8       0     3 5-8      
# 9           1           9       0     2 5-8      
#10           1          10       0     1 5-8      
库(dplyr)
win_大小%
分组依据(参与者)%>%
mutate(sum=zoo::rollsumr(布尔,win_size,fill=NA),
maxwindow={i