我有一个带有 ID 列的数据框,每个唯一 ID 有多个观察值。我还有一个具有二进制值的列 - “通勤”或“集群”。通常情况是,大约十几个集群观察被一两个通勤观察分解,然后回到几个集群,等等。我想要做的是为 ID 创建一个单独的列,其中每个唯一 ID 都被分解根据通勤分解的集群分成多个 ID。
例如,假设观测值 1-15 是聚类,那么 16-17 是通勤,那么 18-30 是聚类。而这些都属于ID“1”。我想要的是将观察值 1-15 标记为“1.1”,然后将观察值 18-30 标记为“1.2”,等等。因此,每个连续的簇分组都以其自己的唯一 ID 结合在一起,然后是下一个簇分组也有自己的唯一 ID,每个唯一 ID 都由一个或多个通勤观察分解。我希望我已经解释得足够好以传达我想要的内容。
group_by(track_ID) %>%
mutate(foraging_event = ifelse(activity3 == "commuting", NA,
cumsum(lag(activity3 == "commuting", default = TRUE)))) %>%
mutate(foraging_event_tight = ifelse(activity2 != "commuting",
NA, cumsum(lag(activity2 != "commuting", default = TRUE)))) %>%
ungroup()
这是我们尝试过但不起作用的代码。有人对我们可以做什么有建议吗?
df <- data.frame(
id = 1,
observation = c(rep("cluster",15), rep("commute", 2), rep("cluster", 13))
)
dplyr::mutate(df, new_id = paste(id, cumsum(observation != lag(observation, default = first(observation))) + 1, sep = "."), .by = id)
# Output
id observation new_id
1 1 cluster 1.1
2 1 cluster 1.1
3 1 cluster 1.1
4 1 cluster 1.1
5 1 cluster 1.1
6 1 cluster 1.1
7 1 cluster 1.1
8 1 cluster 1.1
9 1 cluster 1.1
10 1 cluster 1.1
11 1 cluster 1.1
12 1 cluster 1.1
13 1 cluster 1.1
14 1 cluster 1.1
15 1 cluster 1.1
16 1 commute 1.2
17 1 commute 1.2
18 1 cluster 1.3
19 1 cluster 1.3
20 1 cluster 1.3
21 1 cluster 1.3
22 1 cluster 1.3
23 1 cluster 1.3
24 1 cluster 1.3
25 1 cluster 1.3
26 1 cluster 1.3
27 1 cluster 1.3
28 1 cluster 1.3
29 1 cluster 1.3
30 1 cluster 1.3