我在表中输入缺失值或零值时遇到以下问题。看起来它更像是一个算法问题。我想知道是否有人可以帮我在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
答案 0 :(得分:1)
您似乎希望使用分析方法,使用某种by
迭代数据框并查找平均值。您可以使用by()
和apply()
来考虑某些问题。特定的迭代更改使得在不添加有序变量的情况下更难(即,现在您的行被隐含为编号,但应在资产内按日期编号)。
自己解决这个问题的步骤:
创建一个有序变量,提供从里程(0)到里程(X)的数字。
使用by()
或dplyr::group_by()
创建每个资产的平均值。您可能需要merge()
或dplyr::inner_join()
原始数据集,或使用查找。
使用ifelse()
将该平均值添加到里程数为0的行中,将其乘以有序变量。