我有一个由值组成的数据框和一个包含该数据框中每一列的smooth.spline()对象的列表。一些列缺少单个值,我想用关联的样条中的预测值替换那些丢失的值。预测函数的x值将是缺少值的行名。
可复制的示例,原始数据:
df = data.frame(x1 = seq(1,10), x2 = seq(10,1))
rownames(df) = c(1,2,3,5,6,7,8,9,10,11) ##Note the missing value at 4
splines = list()
splines[[1]] = smooth.spline(x = rownames(df), y = df$x1, df = 10)
splines[[2]] = smooth.spline(x = rownames(df), y = df$x2, df = 10)
names(splines) = c('x1','x2')
经过一些数据处理后,我得到以下数据框:
df2 = data.frame(x1 = c(1,2,3,NA,4,5,6,7,8,9,10),
x2 = c(10,9,8,NA,7,6,5,4,3,2,1))
rownames(df2) = seq(1:11)
> df2
x1 x2
1 1 10
2 2 9
3 3 8
4 NA NA
5 4 7
6 5 6
7 6 5
8 7 4
9 8 3
10 9 2
11 10 1
我想使用之前生成的样条曲线预测缺失值,我想它看起来像这样:
df2 = df2 %>%
mutate_all(.funs = (~case_when(is.na(.) ~ predict(splines[[column_name]],
x = rownames(.))$y,
T ~ (.))
但是当使用列名来调用正确的样条列表对象时,我真的不知道如何制作case_。
最终输出应如下所示:
> df2
x1 x2
1 1.000000 10.000000
2 2.000000 9.000000
3 3.000000 8.000000
4 3.499543 7.500457
5 4.000000 7.000000
6 5.000000 6.000000
7 6.000000 5.000000
8 7.000000 4.000000
9 8.000000 3.000000
10 9.000000 2.000000
11 10.000000 1.000000
This question似乎很接近,但是我不太了解quasure的工作原理如何足以将其转换为我的情况,并且文档并没有那么有用。