在R语言中获取TPR_ar序列第二次出现PD的首个日期
提取特定连续PD序列的首个日期
我需要从以下数据中提取特定日期:
~SUBJID, ~TP.DATE, ~TPR_ar, '2617001', '2019-04-11', 'Undefined', '2617001', '2019-07-09', 'PD', '2617001', '2019-09-07', 'PD', '2617001', '2019-10-19', 'PD', '2617001', '2019-11-12', 'PD', '2617001', '2020-01-13', 'PR', '2617001', '2020-02-24', 'PD', '2617001', '2020-03-24', 'PD', )
观察数据可知,TPR_ar的序列为:'Undefined', 'PD', 'PR', 'PD'。我想要获取第二次PD序列中的首个日期(即2020-02-24),恳请各位帮忙!
Python 解决方法
核心思路是先给连续相同的TPR_ar值标记分组ID,再筛选出第二个PD组的第一条记录:
import pandas as pd # 构造数据集 data = [ ('2617001', '2019-04-11', 'Undefined'), ('2617001', '2019-07-09', 'PD'), ('2617001', '2019-09-07', 'PD'), ('2617001', '2019-10-19', 'PD'), ('2617001', '2019-11-12', 'PD'), ('2617001', '2020-01-13', 'PR'), ('2617001', '2020-02-24', 'PD'), ('2617001', '2020-03-24', 'PD'), ] df = pd.DataFrame(data, columns=['SUBJID', 'TP.DATE', 'TPR_ar']) # 标记连续相同TPR_ar的分组ID df['group_id'] = (df['TPR_ar'] != df['TPR_ar'].shift()).cumsum() # 筛选所有PD组,保留每个组的第一条记录,再取第二个组的日期 pd_groups = df[df['TPR_ar'] == 'PD'].drop_duplicates('group_id', keep='first') target_date = pd_groups.iloc[1]['TP.DATE'] print(target_date) # 输出结果:2020-02-24
R 解决方法
用dplyr链式操作快速实现:
library(dplyr) # 构造数据集 data <- tibble( SUBJID = rep('2617001', 8), TP.DATE = c('2019-04-11', '2019-07-09', '2019-09-07', '2019-10-19', '2019-11-12', '2020-01-13', '2020-02-24', '2020-03-24'), TPR_ar = c('Undefined', 'PD', 'PD', 'PD', 'PD', 'PR', 'PD', 'PD') ) # 标记分组、筛选PD组、取第二个组的首个日期 target_date <- data %>% mutate(group_id = cumsum(TPR_ar != lag(TPR_ar, default = first(TPR_ar)))) %>% filter(TPR_ar == 'PD') %>% distinct(group_id, .keep_all = TRUE) %>% slice(2) %>% pull(TP.DATE) print(target_date) # 输出结果:2020-02-24
内容的提问来源于stack exchange,提问作者D. Shin
相关产品推荐
相关产品推荐

