gpt4 book ai didi

r - 将一个数据集中的缺失值(NA)替换为另一列中匹配的值

转载 作者:行者123 更新时间:2023-12-04 03:50:23 24 4
gpt4 key购买 nike

我有一个包含3列“ x”,“ y和z”的数据框(datadf)。缺少几个“ x”值(NA)。 “ y”和“ z”是不可测量的变量。

x    y z
153 a 1
163 b 1
NA d 1
123 a 2
145 e 2
NA c 2
NA b 1
199 a 2


我还有另一个具有相同三列的数据框(imputeddf):

 x  y z
123 a 1
145 a 2
124 b 1
168 b 2
123 c 1
176 c 2
184 d 1
101 d 2


我希望将“ datadf”中“ x”中的“ NA”替换为“ impteddf”中的值,其中两个数据集之间的“ y”和“ z”匹配(“ y”和“ z”的每个组合都有自己的值) 'x'填写)。

预期结果:

x    y z
153 a 1
163 b 1
184 d 1
123 a 2
145 e 2
176 c 2
124 b 1
199 a 2


我正在尝试类似的事情:

finaldf <- datadf
finaldf$x <- if(datadf[!is.na(datadf$x)]){ddply(datadf, x=imputeddf$x[datadf$y == imputeddf$y & datadf$z == imputeddf$z])}else{datadf$x}


但它不起作用。

我使用估算值df填写 NA的最佳方法是什么?

最佳答案

我会这样做:

library(data.table)
setDT(DF1); setDT(DF2)

DF1[DF2, x := ifelse(is.na(x), i.x, x), on=c("y","z")]


这使

     x y z
1: 153 a 1
2: 163 b 1
3: 184 d 1
4: 123 a 2
5: 145 e 2
6: 176 c 2
7: 124 b 1
8: 199 a 2


注释。这种方法并不是很好,因为它合并了整个 DF1,而我们只需要合并 is.na(x)的子集。在这里,改进看起来像(感谢@Arun):

DF1[is.na(x), x := DF2[.SD, x, on=c("y", "z")]]


这种方式类似于@RHertel的答案。

关于r - 将一个数据集中的缺失值(NA)替换为另一列中匹配的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32638845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com