Filling data frame with previous row value

calculated-columns, dataframe, r

Solution

Perhaps you can make use of `na.locf` from the "zoo" package after setting values of "0" to `NA`. Assuming your `data.frame` is called "mydf":

mydf$state <- mydf$temp
mydf$state[mydf$state == 0] <- NA

library(zoo)
mydf$state <- na.locf(mydf$state)
#      random temp state
# 1 0.5024234  1.0   1.0
# 2 0.6875941  0.0   1.0
# 3 0.7418837  0.0   1.0
# 4 0.4453640  0.0   1.0
# 5 0.5062614  0.5   0.5
# 6 0.5163650  0.0   0.5

If there were `NA` values in your original `data.frame` in the "temp" column, and you wanted to keep them as `NA` in the newly generated "state" column too, that's easy to take care of. Just add one more line to reintroduce the `NA` values:

mydf$state[is.na(mydf$temp)] <- NA

Problem

I have a data frame that has 2 columns. column1 has random numbers in column2 is a place holding column for what i want column3 to look like ``` random temp 0.502423373 1 0.687594055 0 0.741883739 0 0.445364032 0 0.50626137 0.5 0.516364981 0 ... ``` I want to fill column3 so it takes the last non-zero number (1 or .5 in this example) and continuously fills the following rows with that value until it hits a row with a different number. then it repeats the process for the entire column. ``` random temp state 0.502423373 1 1 0.687594055 0 1 0.741883739 0 1 0.445364032 0 1 0.50626137 0.5 0.5 0.516364981 0 0.5 0.807804708 0 0.5 0.247948445 0 0.5 0.46573337 0 0.5 0.103705154 0 0.5 0.079625868 1 1 0.938928944 0 1 0.677713019 0 1 0.112231619 0 1 0.165907178 0 1 0.836195267 0 1 0.387712998 1 1 0.147737077 0 1 0.439281543 0.5 0.5 0.089013503 0 0.5 0.84174743 0 0.5 0.931738707 0 0.5 0.807955172 1 1 ``` thanks for any and all help

Original source

Related problems