Sample of 2 (made-up) example rows in df:
userid facultyid courseid schoolid
167 265 NA 1678
167 71111 301 NA
# initialize a vector that will contain row numbers which should be erased
rows.to.erase <- c()
# loop over the rows, starting from top
for(i in 1:(nrow(dat)-1)) {
if(dat$userid[i] == dat$userid[i+1]) {
# loop over columns to recuperate data when a NA is present
for(j in 2:4) {
if(is.na(dat[i,j]))
dat[i,j] <- dat[i+1,j]
}
rows.to.erase <- append(rows.to.erase, i+1)
}
}
dat.clean <- dat[-rows.to.erase,]
dat.clean
# userid facultyid courseid schoolid
# 1 167 265 301 1678