例如,如果我有一个变量,它取两个值Left
和Right
。计数如下:
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