0

I have a big table in R with lots of NA values.

The first lines:

"tm1" "score1" "score2" "score3" "score4" "score5" "score6" "score7" "score8" "score9" "score10" "score11" "score12" "score13" "score14" "score15" "score16" "score17" "score18" "score19" "score20" "score21" "score22" "score23" "score24" "score25" "score26" "score27" "score28" "score29" "score30" "score31" "score32" "score33" "score34" "score35" "score36" "score37" "score38" "score39" "score40" "score41" "score42" "score43" "score44" "score45" "score46" "score47" "score48" "score49" "score50" "score51" "score52" "score53" "score54" "score55" "score56" "score57" "score58" "score59" "score60" "score61" "score62" "score63" "score64" "score65" "score66" "score67" "score68" "score69" "score70" "score71" "score72" "score73" "score74" "score75" "score76" "score77" "score78" "score79" "score80" "score81" "score82" "score83" "score84" "score85" "score86" "score87" "score88" "score89" "score90" "score91" "score92" "score93" "score94" "score95" "score96" "score97" "score98" "score99" "score100"
"1" 7289 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 35177.5 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
"2" 7290 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 37149 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
"3" 7296 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 33172.3 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
"4" 7297 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 45095.7 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
"5" 7298 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 44116.1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
"6" 7300 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 37162.1 NA 36188.6 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
"7" 7302 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 35188 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
"8" 7303 NA NA NA NA NA NA NA NA 37146.9 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
"9" 7304 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 41134.4 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 32172.8 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 35154.6 NA NA NA NA NA NA
"10" 7306 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 38147 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 36155.7 NA NA 46104.1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
"11" 7308 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 33167.1 NA 27211.4 NA NA NA NA NA NA NA NA NA NA NA NA NA
"12" 7310 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 46097.1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA

I want to replace each scoreX NA value with the previously known value. I wanted to do it using locf from the zoo package:

newdata$score1   <- zoo::na.locf(newdata$score1 )
newdata$score2   <- zoo::na.locf(newdata$score2 )
newdata$score3   <- zoo::na.locf(newdata$score3 )
newdata$score4   <- zoo::na.locf(newdata$score4 )
newdata$score5   <- zoo::na.locf(newdata$score5 )
newdata$score6   <- zoo::na.locf(newdata$score6 )
newdata$score7   <- zoo::na.locf(newdata$score7 )
newdata$score8   <- zoo::na.locf(newdata$score8 )
newdata$score9   <- zoo::na.locf(newdata$score9 )
newdata$score10  <- zoo::na.locf(newdata$score10    )
newdata$score11  <- zoo::na.locf(newdata$score11    )
newdata$score12  <- zoo::na.locf(newdata$score12    )
newdata$score13  <- zoo::na.locf(newdata$score13    )
newdata$score14  <- zoo::na.locf(newdata$score14    )
newdata$score15  <- zoo::na.locf(newdata$score15    )
newdata$score16  <- zoo::na.locf(newdata$score16    )
newdata$score17  <- zoo::na.locf(newdata$score17    )
newdata$score18  <- zoo::na.locf(newdata$score18    )
newdata$score19  <- zoo::na.locf(newdata$score19    )
newdata$score20  <- zoo::na.locf(newdata$score20    )
newdata$score21  <- zoo::na.locf(newdata$score21    )
newdata$score22  <- zoo::na.locf(newdata$score22    )
newdata$score23  <- zoo::na.locf(newdata$score23    )
newdata$score24  <- zoo::na.locf(newdata$score24    )
newdata$score25  <- zoo::na.locf(newdata$score25    )
newdata$score26  <- zoo::na.locf(newdata$score26    )
newdata$score27  <- zoo::na.locf(newdata$score27    )
newdata$score28  <- zoo::na.locf(newdata$score28    )
newdata$score29  <- zoo::na.locf(newdata$score29    )
newdata$score30  <- zoo::na.locf(newdata$score30    )
newdata$score31  <- zoo::na.locf(newdata$score31    )
newdata$score32  <- zoo::na.locf(newdata$score32    )
newdata$score33  <- zoo::na.locf(newdata$score33    )
newdata$score34  <- zoo::na.locf(newdata$score34    )
newdata$score35  <- zoo::na.locf(newdata$score35    )
newdata$score36  <- zoo::na.locf(newdata$score36    )
newdata$score37  <- zoo::na.locf(newdata$score37    )
newdata$score38  <- zoo::na.locf(newdata$score38    )
newdata$score39  <- zoo::na.locf(newdata$score39    )
newdata$score40  <- zoo::na.locf(newdata$score40    )
newdata$score41  <- zoo::na.locf(newdata$score41    )
newdata$score42  <- zoo::na.locf(newdata$score42    )
newdata$score43  <- zoo::na.locf(newdata$score43    )
newdata$score44  <- zoo::na.locf(newdata$score44    )
newdata$score45  <- zoo::na.locf(newdata$score45    )
newdata$score46  <- zoo::na.locf(newdata$score46    )
newdata$score47  <- zoo::na.locf(newdata$score47    )
newdata$score48  <- zoo::na.locf(newdata$score48    )
newdata$score49  <- zoo::na.locf(newdata$score49    )
newdata$score50  <- zoo::na.locf(newdata$score50    )
newdata$score51  <- zoo::na.locf(newdata$score51    )
newdata$score52  <- zoo::na.locf(newdata$score52    )
newdata$score53  <- zoo::na.locf(newdata$score53    )
newdata$score54  <- zoo::na.locf(newdata$score54    )
newdata$score55  <- zoo::na.locf(newdata$score55    )
newdata$score56  <- zoo::na.locf(newdata$score56    )
newdata$score57  <- zoo::na.locf(newdata$score57    )
newdata$score58  <- zoo::na.locf(newdata$score58    )
newdata$score59  <- zoo::na.locf(newdata$score59    )
newdata$score60  <- zoo::na.locf(newdata$score60    )
newdata$score61  <- zoo::na.locf(newdata$score61    )
newdata$score62  <- zoo::na.locf(newdata$score62    )
newdata$score63  <- zoo::na.locf(newdata$score63    )
newdata$score64  <- zoo::na.locf(newdata$score64    )
newdata$score65  <- zoo::na.locf(newdata$score65    )
newdata$score66  <- zoo::na.locf(newdata$score66    )
newdata$score67  <- zoo::na.locf(newdata$score67    )
newdata$score68  <- zoo::na.locf(newdata$score68    )
newdata$score69  <- zoo::na.locf(newdata$score69    )
newdata$score70  <- zoo::na.locf(newdata$score70    )
newdata$score71  <- zoo::na.locf(newdata$score71    )
newdata$score72  <- zoo::na.locf(newdata$score72    )
newdata$score73  <- zoo::na.locf(newdata$score73    )
newdata$score74  <- zoo::na.locf(newdata$score74    )
newdata$score75  <- zoo::na.locf(newdata$score75    )
newdata$score76  <- zoo::na.locf(newdata$score76    )
newdata$score77  <- zoo::na.locf(newdata$score77    )
newdata$score78  <- zoo::na.locf(newdata$score78    )
newdata$score79  <- zoo::na.locf(newdata$score79    )
newdata$score80  <- zoo::na.locf(newdata$score80    )
newdata$score81  <- zoo::na.locf(newdata$score81    )
newdata$score82  <- zoo::na.locf(newdata$score82    )
newdata$score83  <- zoo::na.locf(newdata$score83    )
newdata$score84  <- zoo::na.locf(newdata$score84    )
newdata$score85  <- zoo::na.locf(newdata$score85    )
newdata$score86  <- zoo::na.locf(newdata$score86    )
newdata$score87  <- zoo::na.locf(newdata$score87    )
newdata$score88  <- zoo::na.locf(newdata$score88    )
newdata$score89  <- zoo::na.locf(newdata$score89    )
newdata$score90  <- zoo::na.locf(newdata$score90    )
newdata$score91  <- zoo::na.locf(newdata$score91    )
newdata$score92  <- zoo::na.locf(newdata$score92    )
newdata$score93  <- zoo::na.locf(newdata$score93    )
newdata$score94  <- zoo::na.locf(newdata$score94    )
newdata$score95  <- zoo::na.locf(newdata$score95    )
newdata$score96  <- zoo::na.locf(newdata$score96    )
newdata$score97  <- zoo::na.locf(newdata$score97    )
newdata$score98  <- zoo::na.locf(newdata$score98    )
newdata$score99  <- zoo::na.locf(newdata$score99    )
newdata$score100     <- zoo::na.locf(newdata$score100   )

I get an error, probably due to the fact the the first values do not have a previous value!

Error in $<-.data.frame(*tmp*, "score1", value = c(32189.8, 32189.8, : replacement has 459744 rows, data has 459772

I guess I could rerun my experiment and add a nice tm1=0 value for each run, but I was wondering if there is a way to circumvent this. Say, leave the NA value for the rows that do not have a previous value?

dorien
  • 5,265
  • 10
  • 57
  • 116

1 Answers1

1

You definitely must set some default value, if there is no value in front of first NA. In following example, I set it to 0.

# create new data.frame with score0 = 0 as first column
newdata <- data.frame(newdata$tm1, score0=rep(0,nrow(newdata)), newdata[,-1])

# apply function na.locf to every row
a <- t(apply(newdata[,-c(1)], 1, na.locf))

# append to original data.frame (this will keep the column score0)
newdata[,2:ncol(newdata)] <- a
Zbynek
  • 5,673
  • 6
  • 30
  • 52