我的数据集中有4列。第一个家庭人数,第二个家庭成员人数,col3是一个人的出行次数,col4是该人的活动地点,col5是我想要做的事情。
family persons trip activity
1 1 1 home
1 1 2 work
1 1 3 shopping
1 1 4 home
1 1 5 friends
1 1 6 home
1 2 1 home
1 2 2 work
1 2 3 home
如您在上面的数据集中看到的,我们有第一家庭的2个人的信息。第一人称旅行6次,第二人称旅行3次。在我的分析中,家很重要。我想根据家庭活动进行循环。换句话说,每个循环都是一系列在家中开始并在家中完成的活动。对于第一个人,我们有2个循环:
first loop: home-> work -> shoping -> home
second loop: home -> friends -> home
对于第二人称,我们有1个循环
loop: home -> work -> home
我想添加一列来确定此数据集中的循环数,如下所示:
family persons trip place loop
1 1 1 home 1
1 1 2 work 1
1 1 3 shopping 1
1 1 4 home 1
1 1 5 friends 2
1 1 6 home 2
1 2 1 home 1
1 2 2 work 1
1 2 3 home 1
答案 0 :(得分:2)
按“人”,“家庭”分组后,通过获取逻辑矢量的累加总和并基于输出的lag
来创建基于“家”的索引
library(dplyr)
df1 %>%
group_by(family, persons) %>%
mutate(loop = lag(cumsum(activity == "home"), default = 1))
# A tibble: 9 x 4
# Groups: persons [2]
# persons trip activity loop
# <int> <int> <chr> <dbl>
#1 1 1 home 1
#2 1 2 work 1
#3 1 3 shopping 1
#4 1 4 home 1
#5 1 5 friends 2
#6 1 6 home 2
#7 2 1 home 1
#8 2 2 work 1
39 2 3 home 1