R-按姓名和周数分组ID,然后在受试者中添加周数发生次数

R-按姓名和周数分组ID,然后在受试者中添加周数发生次数,r,dplyr,group-by,mutate,R,Dplyr,Group By,Mutate,我有以下数据集: structure(list(First.Name = c(5006L, 5006L, 5006L, 5006L, 5006L, 5006L, 5006L, 5006L, 5006L, 5006L, 5006L, 5006L, 5006L, 5006L, 5006L, 5006L, 5007L, 5007L, 5007L, 5007L, 5007L), Week_Year = structure(c(21L, 21L, 21L, 21L, 21L, 22L, 22L, 2

我有以下数据集:

structure(list(First.Name = c(5006L, 5006L, 5006L, 5006L, 5006L, 
5006L, 5006L, 5006L, 5006L, 5006L, 5006L, 5006L, 5006L, 5006L, 
5006L, 5006L, 5007L, 5007L, 5007L, 5007L, 5007L), Week_Year = structure(c(21L, 
21L, 21L, 21L, 21L, 22L, 22L, 22L, 22L, 22L, 22L, 22L, 23L, 23L, 
23L, 23L, 17L, 17L, 18L, 18L, 18L), .Label = c("2", "3", "4", 
"5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", 
"16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", 
"27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", 
"38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", 
"49"), class = "factor")), row.names = c(NA, -21L), groups = structure(list(
    First.Name = 5006:5007, .rows = structure(list(1:16, 17:21), ptype = integer(0), class = c("vctrs_list_of", 
    "vctrs_vctr", "list"))), row.names = 1:2, class = c("tbl_df", 
"tbl", "data.frame"), .drop = TRUE), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"))
其中一个子集看起来像:

# A tibble: 21 x 2
# Groups:   First.Name [2]
First.Name Week_Year
<int> <fct> 
5006    23          
5006    23          
5006    24          
5006    24          
5006    24          
5006    24          
5007    18          
5007    18          
5007    19          
5007    19
我一直在玩弄下面的表单,但只有在使用
summary
函数时才能使其工作,这不是我所需要的

df %>% 
  group_by(First.Name, Week_Year) %>% 
  mutate(Week_Count = row_number())

由于这些值是连续的,您只需根据
周\年
的最小值重新编制索引即可:

df %>% 
  dplyr::group_by(First.Name) %>% 
  dplyr::mutate(week_count = Week_Year - min(Week_Year) + 1) %>% 
  dplyr::ungroup()

是的,谢谢!从未听说过
cur\u group\u id
,很高兴知道,事实上,当它转到下一个主题时,不是将
周数重置为
1
,它继续从上一个主题的最后一个计数开始按顺序计数。确保您的
分组依据
您的两个分组变量:
First.Name
Week\u Year
。这就是我所拥有的,正如您在答案中所发布的一样。它首先标识
。对于受试者
5006
,Name
的周数一直计算到第7周,然后在
Week\u Count
ID 8开始受试者
5007
,依此类推。没错,
cur\u group\u ID
不适用于两个分组变量。第二个选项不起作用吗?
df %>% 
  dplyr::group_by(First.Name) %>% 
  dplyr::mutate(week_count = Week_Year - min(Week_Year) + 1) %>% 
  dplyr::ungroup()