我试图用两列对一系列观察进行分组,然后创建一个带有id号的第三列。我已尝试group_indices
,但这会给每个观察组合一个唯一的数字。我想要将数字恢复为1
,以便对每组进行第一次观察。
在我的数据中,有一系列Sites
,其中有多行显示收集观察时的日历Day
。我想计算 a Site
中的时间顺序日。
library(dplyr)
# Make some data
df <- data.frame(Site = rep(c("A", "B", "C"), each = 70),
Day = as.integer(rep(c(21,22,23,24,25,26,27,1,2,3,4,5,6,7,
24,25,26,27,28,29,30), each = 10)))
# Create Day Number column (this doesn't actually work, but is the sort
# of thing I'm looking for...)
df <- df %>% group_by(Site, Day) %>%
mutate(Day.Number = group_indices(Day))
# Desired output
Site Day Day.Number
1 A 21 1
2 A 21 1
3 A 21 1
...
11 A 22 2
12 A 22 2
13 A 22 2
14 A 22 2
15 A 22 2
...
141 C 24 1
142 C 24 1
143 C 24 1
144 C 24 1
...
151 C 25 2
152 C 25 2
153 C 25 2
154 C 25 2
155 C 25 2
...
这只是一个展示问题的玩具数据集。虽然大多数sites
将有七个days
的十个观察值,但它并不总是给定的,因此我不能仅使用rep()
等序列。
答案 0 :(得分:3)
这是一种方法:
df <- df %>%
left_join(unique(df) %>% group_by(Site) %>% mutate(Day.Number=1:n()))
head(df)
# Site Day Day.Number
# 1 A 21 1
# 2 A 21 1
# 3 A 21 1
# 4 A 21 1
# 5 A 21 1
# 6 A 21 1