Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.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中每个组的值创建箱子_R_Dplyr - Fatal编程技术网

基于R中每个组的值创建箱子

基于R中每个组的值创建箱子,r,dplyr,R,Dplyr,我有以下数据: test1<- data.frame("ID"= c("1","1","1", "2","2","2","3"), "TimeElapsed"=c(0,10,40,0,40,12,0)) 我想创建BIN/会话,这样每当ID最后一次输入后经过的时间超过30秒时,我就想为该ID启动一个新会话 tes

我有以下数据:

test1<- data.frame("ID"= c("1","1","1", "2","2","2","3"), "TimeElapsed"=c(0,10,40,0,40,12,0))
我想创建BIN/会话,这样每当ID最后一次输入后经过的时间超过30秒时,我就想为该ID启动一个新会话

test1<-test1 %>%
  group_by(ID) %>%
mutate(cut_session = (TimeElapsed > 30) + 1)
test1%
分组依据(ID)%>%
变异(切割会话=(时间经过>30)+1)
我得到这个结果:

ID  TimeElapsed Session
1    0            1
1    10           1 
1    40           2 
2    0            1  
2    40           2
2    12           1     <- Doesn't work for this case         
3    0            1 
ID timeappeased会话
1    0            1
1    10           1 
1    40           2 
2    0            1  
2    40           2

2 12 1也许,只要逻辑值为真(真/假为1/0),我们就可以使用
cumsum
添加1。按“ID”分组后,获取逻辑向量的累积和

library(dplyr)
test1 %>%
  group_by(ID) %>%
  mutate(cut_session = cumsum(TimeElapsed > 30))
v1 <- c(TRUE, FALSE, TRUE, FALSE, FALSE)
cumsum(v1)
#[1] 1 1 2 2 2

它如何与cumsum一起工作?考虑一个逻辑向量

library(dplyr)
test1 %>%
  group_by(ID) %>%
  mutate(cut_session = cumsum(TimeElapsed > 30))
v1 <- c(TRUE, FALSE, TRUE, FALSE, FALSE)
cumsum(v1)
#[1] 1 1 2 2 2
在这里,
+
是一个明确用于相加的符号,即获取其左侧和右侧两个对象的总和。但是,当存在
NA
时,它的行为会有所不同

NA + 1

返回NA

此处使用
cumsum
是理想的选择。我已经变异了两行,只是想告诉你发生了什么

  • timepassed
    是否超过30
  • 累计计数超过30秒(添加
    1
    以使
    1
    成为起始编号)
  • 库(dplyr)
    测试1%
    分组依据(ID)%>%
    突变(超过30=时间经过>30,
    cut_session=cumsum(超过30)+1)
    #>#tibble:7 x 4
    #>#组:ID[3]
    #>ID时间超过30个cut_会话
    #>                   
    #>1 10假1
    #>2 1 10错误1
    #>3 1 40真实的2
    #>4 2 0错误1
    #>5 2 40真实的2
    #>6 2 12错误2
    #>7 3 0错误1
    

    由(v0.3.0)

    于2020-07-02创建,您可以显示预期的任务,但没有
    +1
    ,也没有任何关于其任务的解释@hashingdata是一个新的海报,所以我认为他可能也是R的新手,因此一些解释将是有益的。谢谢你,这正是我想要的。也谢谢你的描述