基于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的新手,因此一些解释将是有益的。谢谢你,这正是我想要的。也谢谢你的描述