检查一行中的内容是否等于第一个出现的值,如果是,则记录ID:如何在R中自动实现?

Check whether the content in one row equals to the first appeared value, if so, record ID: how to achieve this in R automatically?

我在 R 中将人们的旅行记录作为数据框。如下所示:

   t_participant_id t_destination_PostCode tripReasonString tripSequence
1               304                   1082             work            1
2               304                   1000             work            2
3               304                   1000             work            3
4               304                   1000            other            4
5               304                   1000            other            5
6               304                   1082            other            6
7               304                   1082             home            7
8               362                   1070         shopping            1
9               362                   1070             work            2
10              362                   1070             work            3
11              362                   1070         shopping            4
12              362                   1180             home            5
13              362                   1070          leisure            6
14              362                   1180             home            7
15              482                   2800             work            1
16              482                   2800             work            2
17              482                   1020             home            3

基本上,t_participant_id是一个人的唯一ID,tripReason是人们旅行的原因,t_destination_postcode是他们要去的地区(例如,在第 1 行,人 304 前往区域 1082 work)。

不同的人在一天内有不同的出行次数(304362 总共有 7 次出行,而 482 有 3 次。我想过滤掉t_destination_PostCode出差目的work与此人activity链下其他工作出差相同的人

简而言之,对于304来说,他的第一次工作旅行是在1号线,然后去1082地区。下一次出差是2号线,去1000区。所以我知道他不是我想过滤掉的人。但是,对于 362 人,他在 tripSequence == 2 有第一个 work activity,前往 1070。下一个 work 行程在 tripSequence 3,也到 1070。activity 链中不再有其他工作行程。所以在这种情况下,我们想过滤掉人362,并记录第一个作品tripSequence,即2.

所以最终的结果应该是一个数据框

t_participant_id    firstWorkTrip
             362                2
             482                1

我真的不想手动执行此操作,但不确定如何在 R 中实现此操作。非常感谢您的提前帮助!

这是数据框的代表

test <- data.frame(list(t_participant_id = c(304L, 304L, 304L, 304L, 304L, 
                                             304L, 304L, 362L, 362L, 362L, 362L, 362L, 362L, 362L, 482L, 482L, 
                                             482L), t_destination_PostCode = c(1082L, 1000L, 1000L, 1000L, 
                                                                               1000L, 1082L, 1082L, 1070L, 1070L, 1070L, 1070L, 1180L, 1070L, 
                                                                               1180L, 2800L, 2800L, 1020L), tripReasonString = c("work", "work", 
                                                                                                                                 "work", "other", "other", "other", "home", "shopping", "work", 
                                                                                                                                 "work", "shopping", "home", "leisure", "home", "work", "work", 
                                                                                                                                 "home"), tripSequence = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 
                                                                                                                                                           3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L)))

         
df %>%
  filter(tripReasonString == "work") %>%
  group_by(t_participant_id) %>%
  filter(n_distinct(t_destination_PostCode) == 1) %>%
  summarize(first_work_trip = min(tripSequence))
# # A tibble: 2 × 2
#   t_participant_id first_work_trip
#              <int>           <int>
# 1              362               2
# 2              482               1