我有一个简单的数据帧如下:下标越界错误数据表
hai_dispense_number hai_atc date_of_claim hai_age
1 tom A10A 2011-11-01 42
2 tom A10B 2011-11-01 42
3 tom G10R 2011-11-01 42
4 tom A10A 2012-02-02 42
5 tom A10A 2012-04-03 42
6 mary A10A 2012-02-02 36
7 mary A10A 2012-03-02 36
8 mary G123 2012-03-02 36
9 mary E123 2012-05-02 36
10 mary T123 2012-07-02 36
11 mary A10A 2012-08-02 43
12 sue GR123 2012-03-02 43
13 sue GR123 2012-03-08 43
14 sue GR123 2012-09-03 43
15 sue GR123 2012-10-01 43
16 sue GR123 2012-03-02 43
17 pat A10A 2012-01-02 52
18 pat GR123 2011-11-12 52
19 pat A10A 2012-03-03 52
20 pat GR123 2012-01-01 52
21 pat A10A 2012-05-06 52
我想孤立的人谁只能从2012-01-01开始了代码A10A,而不是在2011年有是上述数据框架中的一些人在任何阶段都没有代码A10A,所以我想摆脱它们。所以最后,我想只有拍拍和玛丽的数据。这里是我如何做到这一点:
第1步:分配“索引日期”。换句话说,2012年,有人拿到了代码A10A
dt2<- data.table(dff,key=c('hai_dispense_number','date_of_claim'))
dt2[,date_of_claim := as.Date(date_of_claim)]
dt2[grepl('^A10A*?', as.character(dt2$hai_atc))& between(date_of_claim,as.Date("2012-01-01"),as.Date("2012-12-31")),
index := as.character(min(date_of_claim))
, by=c('hai_dispense_number','hai_atc')] #
dt2$index<-as.Date(dt2$index, origin='1970-01-01')
dt2$hai_atc<-as.character(dt2$hai_atc)
步骤2中的第一次约会:创建索引日期产生了一些NA对于未A10A或2012-01发生前行中的值。我需要用每个人的唯一索引日期来填写这个NA值。此代码通常工作,但原因与这些数据,我不断收到一个错误
dt2[, index := index[!is.na(index)][[1]], by=hai_dispense_number] ##gives the index date for each person to each of their individual rows of data
Error in index[!is.na(index)][[1]] : subscript out of bounds
步骤3,4和5:我通常可以从这里遵循,并找出谁在2011年有一个代码A10A和然后排除它们。但是我的过程被上述错误中断。
我看着这个页面:Subscript out of bounds - general definition and solution?并尝试运行他们推荐的测试:但它看起来不像我有变量索引额外的行。也许我没有正确测试。
如果任何人都可以解释为什么上述情况发生,我会非常感激。谢谢!
嗨贾普,感谢您的回答和“任何”的建议。我想坚持使用我的代码,因为实际的数据集实际上更复杂一些,代码比A10A长得多。因此,想要继续使用“grepl”,除了更复杂的日期问题外,不仅仅是排除2011年的日期。我在这里提出了一个简单的数据集版本,试图获得有关错误的帮助。你知道为什么我用来重复每个人的唯一索引日期的代码在这里不起作用吗?我以前用过它没有问题,但我无法弄清楚这里发生了什么。 – user2363642
@ user2363642查看更新,HTH – Jaap
单支架工作。这样一个简单的解决方案 - 谢谢。我会玩弄“任何”和我的日期,看看我能不能做到我想要的。你是对的 - 你的代码要简单得多。再次感谢你!为什么双括号不起作用? – user2363642