从R中的另一列创建新列

时间:2019-07-24 15:56:08

标签: r dataframe

我的数据集中有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

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