是否有一种方法来替换基于百分比的缺失值?



例如,如果我有一个变量,它取两个值LeftRight。计数如下:

Left Right 
973   897 

假设我有500个缺失值。用Left代替的缺失值的百分比为973/(973+897),用Right代替的缺失值的百分比为897/(973+897)

如何做到这一点?还是说这是个坏主意?

如果你的数据集是这样的-

vec <- sample(rep(c('Left', 'Right', NA), c(10, 15, 10)))

可以执行比例计算,用-

替换NA
prop <- prop.table(table(vec)) * sum(is.na(vec))
vec[is.na(vec)] <- sample(rep(names(prop), prop))
vec

如果插入可以帮助,原则上是这样的:

测试数据:

set.seed(123)
df <- data.frame(
left = c(rnorm(5), NA, NA, rnorm(5), NA, rnorm(5))
)

解决方案:使用zoo的函数na.approx:

NA的值替换为线性插值值
library(zoo)
library(dplyr)
df %>%
mutate(left_intpl = na.approx(left))
left  left_intpl
1  -0.56047565 -0.56047565
2  -0.23017749 -0.23017749
3   1.55870831  1.55870831
4   0.07050839  0.07050839
5   0.12928774  0.12928774
6           NA  0.65788015
7           NA  1.18647257
8   1.71506499  1.71506499
9   0.46091621  0.46091621
10 -1.26506123 -1.26506123
11 -0.68685285 -0.68685285
12 -0.44566197 -0.44566197
13          NA  0.38920991
14  1.22408180  1.22408180
15  0.35981383  0.35981383
16  0.40077145  0.40077145
17  0.11068272  0.11068272
18 -0.55584113 -0.55584113

最新更新