2017-02-26 33 views
1

我需要查找数据帧中的Balance列是否有三个连续的零点。我需要检查特别RelNo内连续3个月的余额是否为零。这是一个很大的数据集。我的数据帧如下所示:在R数据集中找到三个连续的零点

------------------------------------ 
RelNo -----Date --- ----- Balance 
-------------------------------------- 
AAAA ---- 1/1/2014 ----  0 
------------------------------------- 
AAAA --- 2/1/2014 ----  0 
------------------------------------- 
AAAB --- 1/1/2014 ---  22 
------------------------------------ 
AAAB --- 2/1/2014 ---  2 
----------------------------------- 
AAAA --- 3/1/2014 ---  0 
--------------------------------- 
AAAA --- 4/1/2014 ---  0 
-------------------------------- 
AAAB --- 3/1/2014 ---  32 
------------------------------- 
AAAC ---- 1/1/2014 ---  45 
---------- 
+0

你想按'日期'排序,然后检查连续的0?如果是这样,预期的输出是什么? – akrun

回答

0

也许我们可以使用data.table来创建逻辑列。按'RelNo'和'Date'(在转换为Date类后)将'data.frame'(setDT(df1)),order转换为'RelNo'和逻辑向量的运行长度ID(Balance==0 ),我们为您在“平衡”的值是否all为0,如果行数大于3(.N >=3)和分配(:=)的逻辑输出为“IND”列

library(data.table) 
setDT(df1)[order(RelNo, as.Date(Date, "%d/%m/%Y")), 
     ind := all(Balance==0) & .N >=3, .(RelNo, rleid(Balance==0))] 
df1 
# RelNo  Date Balance ind 
#1: AAAA 1/1/2014  0 TRUE 
#2: AAAA 2/1/2014  0 TRUE 
#3: AAAB 1/1/2014  22 FALSE 
#4: AAAB 2/1/2014  24 FALSE 
#5: AAAA 3/1/2014  0 TRUE 
#6: AAAA 4/1/2014  0 TRUE 
#7: AAAB 3/1/2014  32 FALSE 
#8: AAAC 1/1/2014  45 FALSE 
+1

谢谢我需要按日期排序。解决方案正在运行 –