使用组索引或R中的类似索引的组特定ID号

使用组索引或R中的类似索引的组特定ID号,r,dplyr,R,Dplyr,我试图将一系列观察结果按两列进行分组,然后创建第三列,其中包含id号。我尝试了组索引,但这给了每个观察组合一个唯一的数字。对于每组的第一次观察,我希望数字恢复为1 在我的数据中,有一系列的站点,其中有许多行显示了收集观察时的日历日期。我想计算站点中按时间顺序排列的日期 library(dplyr) # Make some data df <- data.frame(Site = rep(c("A", "B", "C"), each = 70), Day = as.

我试图将一系列观察结果按两列进行分组,然后创建第三列,其中包含id号。我尝试了
组索引
,但这给了每个观察组合一个唯一的数字。对于每组的第一次观察,我希望数字恢复为
1

在我的数据中,有一系列的
站点
,其中有许多行显示了收集观察时的日历
日期
。我想计算
站点
中按时间顺序排列的日期

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
...
库(dplyr)
#制作一些数据
df%
突变(Day.Number=组指数(Day))
#期望输出
站点日数
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
155C 25 2
...
这只是一个演示问题的玩具数据集。虽然大多数
站点
将有七天的十次观察但这并不总是一个给定的,所以我不能仅仅使用一系列的
rep()


github上对此进行了一些讨论,但似乎还没有解决。非常感谢您对解决方法的任何建议。

这里有一种方法:

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
df%
左加入(唯一(df)%%>%group\U by(站点)%%>%mutate(Day.Number=1:n())
头部(df)
#站点日数
#1 A 21 1
#2 A 21 1
#3 A 21 1
#4 A 21 1
#5 A 21 1
#6 A 21 1

我得到以下信息<代码>秩中的错误(x,ties.method=“first”,na.last=“keep”):缺少参数“x”,没有默认值。。。当我简单地使用
row\u number()
时,我得到了预期的结果,但是当我指定
dplyr::row\u number()
时,我得到了与您相同的错误。我更新了
dplyr
并重新启动了会话,但没有成功;看来这个问题可能与此有关
1:n()
可以用作
row\u number()
的替代品。奇怪-在我的情况下,指定
dplyr
使错误消失。。。无论如何,您的答案与示例数据非常吻合。我的真实数据有更多的列,所以所有的行都是唯一的。然后它只给出行号作为输出。因此,作为一种解决方法,我将
站点
列分为子集,使用您的代码,然后将新的
日.Number
列添加回主数据框。谢谢你的帮助!