我尝试用R语言编写一个数据集的代码,检查DAYS列是否有连续的数字,并打印出缺失的DAYS数字,如果DAYS列的两行之间缺失的连续数字的计数等于PERIOD列的相应最后一行中的计数+1,则将其从输出中排除。例如,考虑DAYS列163和165中的两行,其中缺失数字的计数为1。但在本例中,最后一行(DAYS为165)的PERIOD值为2,即(count+1)。因此,从输出中排除此缺失值(164)。但是,如果你看一下DAYS 170和172,你可以看到172的PERIOD值为1(不是2或count+1)。因此,显示此输出(171)。
这是数据集的前28行。
DAYS PERIOD
146 1
147 1
148 1
149 1
150 1
151 1
152 1
153 1
154 1
155 1
156 1
157 1
158 1
159 1
160 1
161 1
162 1
163 1
165 2
166 1
167 1
168 1
169 1
170 1
172 1
173 1
174 1
175 1
首先,创建一个预期DAYS
值序列expected_days <- seq(min(hs$DAYS), max(hs$DAYS))
然后,查找缺失的DAYS
值missing_days <- setdiff(expected_days, hs$DAYS)
下一步怎么做?
2条答案
按热度按时间13z8s7eq1#
我使用Tidyverse工具做到了这一点:
设置示例数据
我稍微调整了您的数据,以显示该解决方案可以处理更长时间的缺失天数。
在数据框中显式添加空天数
求连续缺失天数
删除所有天数的行
创建于2023-06-01使用reprex v2.0.2
piztneat2#
取行差,看看它们是否等于
PERIOD
列值(忽略第一行):Tidyverse版本: