选择组的最后一行

时间:2019-09-10 15:58:53

标签: r dataframe

我有一个数据框。

       household    person     trip      loop
          1           1         1          1
          1           1         2          1
          1           1         3          1
          1           1         4          2
          1           1         5          2
          1           2         1          1
          1           2         2          1
          1           2         3          2
          2           1         1          1
          2           1         2          1
          2           1         3          2
          2           1         4          2

对于每个家庭中的每个人,我想更改列旅行中的一些指标,如下所示:

更改循环时,我希望旅行索引策略从1点开始。

输出

       household    person     trip      loop
          1           1         1          1
          1           1         2          1
          1           1         3          1
          1           1         1          2
          1           1         2          2
          1           2         1          1
          1           2         2          1
          1           2         1          2
          2           1         1          1
          2           1         2          1
          2           1         1          2
          2           1         2          2

2 个答案:

答案 0 :(得分:2)

我们可以使用

library(dplyr)
df1 %>% 
  group_by(household, person, loop) %>%
  mutate(trip = row_number())
# A tibble: 12 x 4
# Groups:   household, person, loop [6]
#   household person  trip  loop
#       <int>  <int> <int> <int>
# 1         1      1     1     1
# 2         1      1     2     1
# 3         1      1     3     1
# 4         1      1     1     2
# 5         1      1     2     2
# 6         1      2     1     1
# 7         1      2     2     1
# 8         1      2     1     2
# 9         2      1     1     1
#10         2      1     2     1
#11         2      1     1     2
#12         2      1     2     2

数据

df1  <- structure(list(household = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
2L, 2L, 2L, 2L), person = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 
1L, 1L, 1L), trip = c(1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 1L, 2L, 
3L, 4L), loop = c(1L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 1L, 2L, 
2L)), class = "data.frame", row.names = c(NA, -12L))

答案 1 :(得分:1)

使用data.table

library(data.table)

df <- setDT(df) # Making sure your data is a data table
df[, trip := seq_len(.N), by = .(household, person, loop)]