Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

replacing a missing value in R with average value

I have a dataframe with columns of data with missing value and I would like to replace the missing value by taking the mean using the value of the cells above and below.

 df1<-c(2,2,NA,10, 20, NA,3)
 if(df1[i]== NA){
 df1[i]= mean(df1[i+1],df1[i-1])
}

However, I am getting this error

  Error in if (df1[i] == NA) { : missing value where TRUE/FALSE needed
  In addition: Warning message:
  In if (df1[i] == NA) { :
  the condition has length > 1 and only the first element will be used

Any guidance would be appreciated to solve this issue.

like image 891
NickWilson Avatar asked Apr 13 '26 14:04

NickWilson


1 Answers

If you are sure you don't have any consecutive NA values and the first and last elements are never NA, then you can do

df1<-c(2,2,NA,10, 20, NA,3)
idx<-which(is.na(df1))
df1[idx] <- (df1[idx-1] + df1[idx+1])/2
df1
# [1]  2.0  2.0  6.0 10.0 20.0 11.5  3.0

This should be more efficient than a loop.

like image 150
MrFlick Avatar answered Apr 16 '26 04:04

MrFlick



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!