如何在表格的日期范围内输入缺失的数据?

时间:2017-06-30 16:33:42

标签: python r algorithm

我在表中输入缺失值或零值时遇到以下问题。看起来它更像是一个算法问题。我想知道是否有人可以帮我在python或R中解决这个问题。

Asset  Mileage      Date
-----------------------------------
A   41,084        01/26/2017 00:00:00
A   0             01/24/2017 00:00:00
A   0             01/23/2017 00:00:00
A   40,864        01/19/2017 00:00:00
A   0             01/18/2017 00:00:00
B   5,000         01/13/2017 00:00:00
B   0             01/12/2017 00:00:00
B   0             01/11/2017 00:00:00
B   0             01/10/2017 00:00:00
B   0             01/09/2017 00:00:00
B   2,000         01/07/2017 00:00:00

为每个资产(A,B等等)按时间顺序(日期)遍历记录,用点数之间的平均里程数替换所有零=

  

(早期里程不为零 - 后来里程不为零)/   (从早期里程到后期里程的记录数量)+   较早的里程。

例如对于上表,数据在修复后将如下所示

Asset  Mileage      Date
-----------------------------------
A   41,084  01/26/2017 00:00:00
A   40,974  01/24/2017 00:00:00
A   40,919  01/23/2017 00:00:00 
A   40,864  01/19/2017 00:00:00
A   39,800  01/18/2017 00:00:00
B   5,000   01/13/2017 00:00:00
B   4,000   01/12/2017 00:00:00
B   3,500   01/11/2017 00:00:00
B   3,000   01/10/2017 00:00:00
B   2,500   01/09/2017 00:00:00
B   2,000   01/07/2017 00:00:00

在上述情况下,例如其中一条记录的计算如下:

  

(41084-40864)/ 4(40,864至41,084的记录数量)= 110 +之前   价值(40,864)= 40919

1 个答案:

答案 0 :(得分:1)

您似乎希望使用分析方法,使用某种by迭代数据框并查找平均值。您可以使用by()apply()来考虑某些问题。特定的迭代更改使得在不添加有序变量的情况下更难(即,现在您的行被隐含为编号,但应在资产内按日期编号)。

自己解决这个问题的步骤:

  1. 创建一个有序变量,提供从里程(0)到里程(X)的数字。

  2. 使用by()dplyr::group_by()创建每个资产的平均值。您可能需要merge()dplyr::inner_join()原始数据集,或使用查找。

  3. 使用ifelse()将该平均值添加到里程数为0的行中,将其乘以有序变量。