我想根据该特定 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/