R:使用dplyr根据值更改添加新变量
我的数据集如下所示:R:使用dplyr根据值更改添加新变量,r,dplyr,mutate,case-when,R,Dplyr,Mutate,Case When,我的数据集如下所示: id <- c(1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2) v1 <- c("A","A","A","A","B","B","B","B","B","A","A","A&qu
id <- c(1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2)
v1 <- c("A","A","A","A","B","B","B","B","B","A","A","A","A","A","A","A","A","B","B","B","B","B","A","A","A","A")
v2 <- c(1,1,1,2,2,2,2,2,2,2,3,3,3,1,1,1,2,2,2,2,2,2,2,3,3,3)
mydata<- data.frame(id,v1,v2)
mydata <-mydata %>% group_by(id)%>% mutate(phase= case_when(v1 == "A" & (v2 == 1 | v2==2) ~ "Going", phase == "A" & (v2 == 2 | v2==3) ~ "Returning", phase == "B" ~ "Staying"))
id在按“id”分组后,根据相邻元素是否相同(rleid
)在“v1”上创建分组,然后在
时使用case\u,如果“v1”值为“B”,返回“停留”,如果“v1”为“a”且“grp”为1,则返回“继续”,如果“grp”大于1,则返回”
library(data.table)
library(dplyr)
mydata %>%
group_by(id) %>%
mutate(grp = rleid(v1), phase = case_when(v1 == 'B' ~ 'Staying',
v1 == 'A' & grp == 1 ~ 'Going', v1 == 'A' &
grp > 1 ~ 'Returning')) %>%
ungroup %>%
select(-grp)
按“id”分组后,根据相邻元素是否相同(rleid
)在“v1”上创建分组,然后在
时使用case\u,如果“v1”值为“B”,则返回“停留”,如果“v1”为“a”且“grp”为1,则返回“继续”,如果“grp”大于1,则返回”
library(data.table)
library(dplyr)
mydata %>%
group_by(id) %>%
mutate(grp = rleid(v1), phase = case_when(v1 == 'B' ~ 'Staying',
v1 == 'A' & grp == 1 ~ 'Going', v1 == 'A' &
grp > 1 ~ 'Returning')) %>%
ungroup %>%
select(-grp)