Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在tidy中创建递归变量_R_Recursion_Tidyverse_Mutate_Tidy - Fatal编程技术网

R 在tidy中创建递归变量

R 在tidy中创建递归变量,r,recursion,tidyverse,mutate,tidy,R,Recursion,Tidyverse,Mutate,Tidy,我正在尝试创建一个整洁的解决方案,根据某个事件是否发生创建一个持续时间变量。这在for循环中非常简单 library(tidyverse) df <- tibble(event = c(0,0,0,0,1,0,0,1,1,0,0,1)) df$dur <- NA df$dur[1]<-0 for(i in 2:nrow(df)){ if(df$event[i]==0){ df$dur[i] <- df$dur[i-

我正在尝试创建一个整洁的解决方案,根据某个事件是否发生创建一个持续时间变量。这在for循环中非常简单

    library(tidyverse)
    df <- tibble(event = c(0,0,0,0,1,0,0,1,1,0,0,1))
    df$dur <- NA
    df$dur[1]<-0 
    for(i in 2:nrow(df)){
    if(df$event[i]==0){
    df$dur[i] <- df$dur[i-1]+1
    }else{
    df$dur[i] <- 0
    }
    }
    print(df)
库(tidyverse)

df这里有一种方法,当
event==1
时,通过
cumsum
捕获您的组,即

library(dplyr)

df %>% 
 group_by(grp = cumsum(event == 1)) %>% 
 mutate(dur = seq(n()) - 1)

which gives,
#一个tible:12 x 3
#组别:grp[5]
事件grp dur
1     0     0     0
2     0     0     1
3     0     0     2
4     0     0     3
5     1     1     0
6     0     1     1
7     0     1     2
8     1     2     0
9     1     3     0
10     0     3     1
11     0     3     2
12     1     4     0

注意:如果您愿意,您可以
取消分组
并删除最后的列
grp
,您可以提供您的预期输出吗?如果我运行
for循环
我会得到一个序列为0到11的新列…如何让代码运行以生成输出@Sotos,代码中有一个输入错误,现在已修复。谢谢,这是一个优雅的解决方案!
library(dplyr)

df %>% 
 group_by(grp = cumsum(event == 1)) %>% 
 mutate(dur = seq(n()) - 1)

which gives,
# A tibble: 12 x 3
# Groups:   grp [5]
   event   grp   dur
   <dbl> <int> <dbl>
 1     0     0     0
 2     0     0     1
 3     0     0     2
 4     0     0     3
 5     1     1     0
 6     0     1     1
 7     0     1     2
 8     1     2     0
 9     1     3     0
10     0     3     1
11     0     3     2
12     1     4     0