Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.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中不同列中的条件在分组数据中创建couting变量_R_Group By_Dplyr - Fatal编程技术网

根据R中不同列中的条件在分组数据中创建couting变量

根据R中不同列中的条件在分组数据中创建couting变量,r,group-by,dplyr,R,Group By,Dplyr,在每个“Id”中,我想创建一个计数变量(“变量_x”),从“1”开始,一直持续到“天”大于150。当这种情况发生时,我希望变量_x“更改为“2”,并一直持续到下一次“days”大于150,此时应更改为“3”,以此类推,如下面的示例所示 # Problem Id <- c("A","A","A","A","A","A","B","B","B","B","B","B","B","B") days <- c(18, 29, 4, 160, 4, 5,1, 6, 170, 4,190,45

在每个“Id”中,我想创建一个计数变量(“变量_x”),从“1”开始,一直持续到“天”大于150。当这种情况发生时,我希望变量_x“更改为“2”,并一直持续到下一次“days”大于150,此时应更改为“3”,以此类推,如下面的示例所示

# Problem 
Id <- c("A","A","A","A","A","A","B","B","B","B","B","B","B","B")
days <- c(18, 29, 4, 160, 4, 5,1, 6, 170, 4,190,45, 60,1 )

DATA_pre <- data.frame(Id, days)
DATA_pre
Id days
1   A   18
2   A   29
3   A    4
4   A  160
5   A    4
6   A    5
7   B    1
8   B    6
9   B  170
10  B    4
11  B  190
12  B   45
13  B   60
14  B    1

# Preferred Solution 
Id <- c("A","A","A","A","A","A","B","B","B","B","B","B","B","B")
days <- c(18, 29, 4, 160, 4, 5,1, 6, 170, 4,190,45, 60,1 )
Variable_x <- c("1","1", "1", "2","2","2", "1","1","2","2","3","3","3","3")

DATA_post <- data.frame(Id, days, Variable_x) 
DATA_post 
 Id days Variable_x
1   A   18          1
2   A   29          1
3   A    4          1
4   A  160          2
5   A    4          2
6   A    5          2
7   B    1          1
8   B    6          1
9   B  170          2
10  B    4          2
11  B  190          3
12  B   45          3
13  B   60          3
14  B    1          3
#问题

Id我们可以使用
cumsum

library(dplyr)
DATA_pre %>% group_by(Id) %>% mutate(Variable_x = cumsum(days > 150) + 1)

#   Id     days Variable_x
#   <fct> <dbl>      <dbl>
# 1 A        18          1
# 2 A        29          1
# 3 A         4          1
# 4 A       160          2
# 5 A         4          2
# 6 A         5          2
# 7 B         1          1
# 8 B         6          1
# 9 B       170          2
#10 B         4          2
#11 B       190          3
#12 B        45          3
#13 B        60          3
#14 B         1          3
数据我们也可以

library(dplyr)   
DATA_pre %>%
      group_by(Id) %>% mutate(Variable_x = as.integer(factor(cumsum(days > 150))))
library(data.table)
setDT(DATA_pre)[, Variable_x:= cumsum(days > 150) + 1, Id]
data <- DATA_pre
data <- data.table(data)
data[,Flag:=ifelse(days>150,1,0)]
data[,Count:=cumsum(Flag),by="Id")]
data[,Count:=Count+1]
library(dplyr)   
DATA_pre %>%
      group_by(Id) %>% mutate(Variable_x = as.integer(factor(cumsum(days > 150))))