将 NA 替换为 R 中特定列的先前值

标签 r

我想根据该特定 ID 的给定变量值将 NA 转换为特定值。示例查询:df1 ---> df2

df1 = data.frame(ID=c(1,1, 1, 1, 2,2,2,2,3,3,3,3),WHR=c(0.8,NA, NA, NA,1.0, NA, NA,NA,1.1, NA, NA, NA))

df2=data.frame(ID=c(1,1, 1, 1, 2,2,2,2,3,3,3,3),WHR=c(0.8,0.8, 0.8, 0.8,1.0, 1.0,1.0,1.0, 1.1, 1.1,1.1,1.1))`

我尝试过的

R fill in NA with previous row value with condition :

library(xts)
df1[,WHR:=na.locf("WHR", fromlast=TRUE, by = ID)` 

出现错误:

could not find function ":="; 

我使用此代码是因为我有数百个 ID 值,并且我想要一个自动代码来根据 ID 更改特定列中的 NA

如何将 df1 转换为 df2? (请也解释一下您的代码,这样它可能会帮助其他初学者用户)。谢谢你!

最佳答案

使用基本 R,您可以使用其位置的总和和 ave 函数来广播第一个非 NA:

df2$WHR.Comp = ave(df1$WHR, cumsum(!is.na(df1$WHR)), FUN=function(x) x[1])

> df2
   ID WHR WHR.Comp
1   1 0.8      0.8
2   1 0.8      0.8
3   1 0.8      0.8
4   1 0.8      0.8
5   2 1.0      1.0
6   2 1.0      1.0
7   2 1.0      1.0
8   2 1.0      1.0
9   3 1.1      1.1
10  3 1.1      1.1
11  3 1.1      1.1
12  3 1.1      1.1

关于将 NA 替换为 R 中特定列的先前值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36084622/

相关文章:

regex - 用于匿名电子邮件的正则表达式

r - 在 Ubuntu 中安装 R 包以更正库路径

r - 在 R 中使用 EBImage 进行图像处理循环

r - 如何用单个值替换数据框中每行的最大值

python - 代码的行分析器是否需要解析树,这就足够了吗?

r - 分别对列表的每个元素应用函数

r - 没有magrittr的dplyr中的博览会?

从评分键重新评分项目

r - 为什么 data.table 的 order 和 setorder(v) 之间存在这种差异?

r - r 中 sapply 和 lapply 的语法