如何创建新列来对 R 数据框中的 ID 列进行子集化?

问题描述 投票:0回答:1

我有一个带有 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()

这是我们尝试过但不起作用的代码。有人对我们可以做什么有建议吗?

r if-statement mutate
1个回答
0
投票
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
© www.soinside.com 2019 - 2024. All rights reserved.