【发布时间】:2015-02-12 05:42:51
【问题描述】:
我有这样的数据:
v1 = c( -1, 1, 420, 400, 400, 170, 420)
v2 = c( 350, 460, 420, 400, 500, 170, 420)
v3 = c( 350, 460, 420, 1, 500, 3, 1)
v4 = c( 1, NA, 420, 1, NA, 170, 420)
v5 = c( 350, 400, 400, 1, 1, 3, 300)
v6 = c( 350, 400, NA, 500, 500, 170, 300)
v7 = c(7,400,200,7,500,170,7)
DF1= data.frame(v1, v2, v3, v4, v5, v6, v7)
产生如下表/DF:
v1 v2 v3 v4 v5 v6 v7
1 -1 350 350 1 350 350 7
2 1 460 460 NA 400 400 400
3 420 420 420 420 400 NA 200
4 400 400 1 1 1 500 7
5 400 500 500 NA 1 500 500
6 170 170 3 170 3 170 170
7 420 420 1 420 300 300 7
三位数字是工作时间 (400=40h),一位数字是就业状态。数据的问题是,我的目标是每月信息(v1-v7 是几个月),但我每年只调查一次工作时间。所以我把它放在各州上,现在我有同样的空白要填补。
我想用最近邻替换状态“-1”,“NA”,“1”和“3”(不计算,只是替换下一个高于“50”的值)优先考虑左边的值/应该被替换的 case 左边的变量。
最后应该是这样的:
v1 v2 v3 v4 v5 v6 v7
1 350 350 350 350 350 350 7
2 460 460 460 460 400 400 400
3 420 420 420 420 400 NA 200
4 400 400 400 400 500 500 7
5 400 500 500 500 500 500 500
6 170 170 170 170 170 170 170
7 420 420 420 420 300 300 7
注意第 4 行,其中“1”中的 2 个被替换为左侧的值,而一个被替换为右侧的 50 以上的下一个值 - 这就是我所说的“左侧优先级”。
到目前为止,我刚刚体验了 impute-package 的随机插补,也看到了 knn-package,但据我了解,它只适用于 NA,对吧?
我很感激任何提示,因为将其导出为 .csv 并手动解决它需要 10 多个小时(11 个数据集,每个数据集 100-200 行)
提前致谢!
【问题讨论】:
-
为什么你的结果(第 3 行)中有
NA?? -
DF1["3","v6"] 应该是 400?
-
第 4 行似乎也不符合您的规则。
-
第 3 行中的 NA 是我设计此示例数据的错误...抱歉...它应该是 400。 - 第 4 行是一个示例,如果有超过 2 个缺失,值应取自一侧和另一侧(但如果 NA 的数量不均匀,则优先考虑左侧)
标签: r replace conditional-statements nearest-neighbor knn