R 如何计算每个id的重复事件数

R 如何计算每个id的重复事件数,r,dataframe,count,data-manipulation,R,Dataframe,Count,Data Manipulation,我有一个从REDCap提取的数据框,我已经在RStudio中导入了CSV。 将列出唯一的参与者id,然后列出事件。我需要列出每个重复事件的数量,例如1010002的急性事件感染事件4是第一个拒绝事件,然后4b是第二个事件,4c是第三个事件,依此类推 我需要为后续、拒绝和CMV/EBV事件执行此操作 这是一个带有3个ID的数据帧的小快照(实际df有1000个ID) 这就是我需要在redcap_repeat列中添加的内容 @请在下面列出一些示例(缺少红色粗体) 这里有一个选项 library(t

我有一个从REDCap提取的数据框,我已经在RStudio中导入了CSV。 将列出唯一的参与者id,然后列出事件。我需要列出每个重复事件的数量,例如1010002的急性事件感染事件4是第一个拒绝事件,然后4b是第二个事件,4c是第三个事件,依此类推

我需要为后续、拒绝和CMV/EBV事件执行此操作

这是一个带有3个ID的数据帧的小快照(实际df有1000个ID)

这就是我需要在redcap_repeat列中添加的内容

@请在下面列出一些示例(缺少红色粗体)

这里有一个选项

library(tidyverse)
df1 %>% 
    group_by(id, grp1 = str_remove(redcap_event_name, "[a-z]$|^\\d+_")) %>% 
    mutate(redcap_repeat =if(any(str_detect(redcap_event_name,  "[a-z]$|^[0-9]")) & 
       n() > 1) as.character(row_number()) else "") %>% 
     ungroup %>%
     group_by(id, grp1 = str_remove(redcap_event_name, "^\\d+_(month|year)_")) %>%
     mutate(redcap_repeat = case_when(redcap_repeat != "" & n() > 1 ~ 
          as.character(row_number()),
          TRUE ~ redcap_repeat)) %>% 
     ungroup %>%
     select(-grp1) %>%
     as.data.frame
-输出

#        id         redcap_event_name redcap_repeat
#1  1010002      pre_transplant_arm_4              
#2  1010002          transplant_arm_4              
#3  1010002        transplant_2_arm_4              
#4  1010002  end_of_followup_fo_arm_4              
#5  1010002      last_encounter_arm_4              
#6  1010002  acute_event_reject_arm_4             1
#7  1010002 acute_event_reject_arm_4b             2
#8  1010002  acute_event_infect_arm_4             1
#9  1010002 acute_event_infect_arm_4b             2
#10 1010002 acute_event_infect_arm_4c             3
#11 1010002 acute_event_infect_arm_4d             4
#12 1010002 acute_event_infect_arm_4e             5
#13 1010002 acute_event_infect_arm_4f             6
#14 1010002 acute_event_infect_arm_4g             7
#15 1010002  acute_event_cmvebv_arm_4             1
#16 1010002 acute_event_cmvebv_arm_4b             2
#17 1010006      pre_transplant_arm_4              
#18 1010006          transplant_arm_4              
#19 1010006    1_month_followup_arm_4              
#20 1010006     2_year_followup_arm_4              
#21 1010006      last_encounter_arm_4              
#22 1010006  acute_event_reject_arm_4             1
#23 1010006 acute_event_reject_arm_4b             2
#24 1010006  acute_event_infect_arm_4             1
#25 1010006 acute_event_infect_arm_4b             2
#26 1010006 acute_event_infect_arm_4c             3
#27 1010006  acute_event_cmvebv_arm_4              
#28 1010008      pre_transplant_arm_4              
#29 1010008          transplant_arm_4              
#30 1010008    3_month_followup_arm_4             1
#31 1010008    6_month_followup_arm_4             2
#32 1010008     1_year_followup_arm_4             3
#33 1010008     2_year_followup_arm_4             4
#34 1010008     3_year_followup_arm_4             5
#35 1010008      last_encounter_arm_4              
#36 1010008  acute_event_reject_arm_4              
#37 1010008  acute_event_infect_arm_4              
#38 1010008  acute_event_cmvebv_arm_4              

图像是发布数据(或代码)的一种非常糟糕的方式。您能否以
dput
格式发布样本数据?请使用
dput(df)
的输出编辑问题。或者,如果dput(头部(df,20))的输出太大。(
df
是您的数据集的名称。)@RuiBarradas我已根据您的要求编辑了问题完整数据集中的每个事件是否以
\u 4*
结尾,其中*不是零就是一个字母?带有
3个月
6个月
1年
等的行将具有挑战性,由于您必须检测和拆分与时间相关的短语,这些短语的维度与您要计算的维度不同,因此事件名称。您是否需要
df1%>%group\u by(id,grp1=str\u remove(redcap\u event\u name,“[a-z]$”)%%>%的变化(repa\u repeat=if(any(str\u detect)(子字符串(redcap\u event\u name,nchar(redcap\u event\u event\u name)),“[a-z]”))as.character(row_number())else“”)
@JBrowne13很抱歉,我在软件包版本I中没有收到该错误have@JBrowne13我使用了
packageVersion('dplyr')#[1]“0.8.0.1”
@JBrowne13可能是因为您没有加载包
library(dplyr)
好的,我让它工作了,然而,我刚刚注意到,对于id 1010006,1个月和2年的跟踪在redcap重复中也应该分别有1和2column@JBrowne13我的解决方案基于您发布的预期输出。它没有那个。
#        id         redcap_event_name redcap_repeat
#1  1010002      pre_transplant_arm_4              
#2  1010002          transplant_arm_4              
#3  1010002        transplant_2_arm_4              
#4  1010002  end_of_followup_fo_arm_4              
#5  1010002      last_encounter_arm_4              
#6  1010002  acute_event_reject_arm_4             1
#7  1010002 acute_event_reject_arm_4b             2
#8  1010002  acute_event_infect_arm_4             1
#9  1010002 acute_event_infect_arm_4b             2
#10 1010002 acute_event_infect_arm_4c             3
#11 1010002 acute_event_infect_arm_4d             4
#12 1010002 acute_event_infect_arm_4e             5
#13 1010002 acute_event_infect_arm_4f             6
#14 1010002 acute_event_infect_arm_4g             7
#15 1010002  acute_event_cmvebv_arm_4             1
#16 1010002 acute_event_cmvebv_arm_4b             2
#17 1010006      pre_transplant_arm_4              
#18 1010006          transplant_arm_4              
#19 1010006    1_month_followup_arm_4              
#20 1010006     2_year_followup_arm_4              
#21 1010006      last_encounter_arm_4              
#22 1010006  acute_event_reject_arm_4             1
#23 1010006 acute_event_reject_arm_4b             2
#24 1010006  acute_event_infect_arm_4             1
#25 1010006 acute_event_infect_arm_4b             2
#26 1010006 acute_event_infect_arm_4c             3
#27 1010006  acute_event_cmvebv_arm_4              
#28 1010008      pre_transplant_arm_4              
#29 1010008          transplant_arm_4              
#30 1010008    3_month_followup_arm_4             1
#31 1010008    6_month_followup_arm_4             2
#32 1010008     1_year_followup_arm_4             3
#33 1010008     2_year_followup_arm_4             4
#34 1010008     3_year_followup_arm_4             5
#35 1010008      last_encounter_arm_4              
#36 1010008  acute_event_reject_arm_4              
#37 1010008  acute_event_infect_arm_4              
#38 1010008  acute_event_cmvebv_arm_4