[R] using if else function to complete a column in data frame

Cacique Samurai caciquesamurai at gmail.com
Mon Jan 9 06:21:45 CET 2017


Hello all!

I´m trying to complete the "movimento" column in dataframe based in
the values of "kmr" column in two sequential lines, as below:

data example (dput in the end of email):

         ID    kmr movimento
5    10.700 314.20        NA
1    10.700 278.74        NA
2    10.700 278.74        NA
3    10.700 278.74        NA
4    10.700 278.74        NA
494 100.700 269.94        NA
500 100.700 278.74        NA
499 100.700 314.20        NA
495 100.700 278.74        NA
498 100.700 278.74        NA
496 100.700 255.40        NA
497 100.700 255.10        NA

Once I have different IDs, I wrote this function:

move = function (x){

  for (j in x$ID){

    for (i in 2:length(x$kmr)-1){

      if (x$kmr[i+1]  < x$kmr[i]) {
        x$movimento[i+1] <- "jusante"
      } else if (x$kmr[i+1] > x$kmr[i]) {
        x$movimento[i+1] <- "montante"
      } else {
        x$movimento[i+1] <- "parado"
      }

    }

  }

  return (x)
}

Worked pretty well with just one ID, but with many IDs the function
didn´t detach different IDs.

         ID    kmr movimento
5    10.700 314.20      <NA>
1    10.700 278.74   jusante
2    10.700 278.74    parado
3    10.700 278.74    parado
4    10.700 278.74    parado
494 100.700 269.94   jusante <-- this should be <NA>
500 100.700 278.74  montante
499 100.700 314.20  montante
495 100.700 278.74   jusante
498 100.700 278.74    parado
496 100.700 255.40   jusante
497 100.700 255.10   jusante

I also tried remove the first If condition and pass this function
using lapply in the splitted original data-frame, but didn´t work as
well.

Some onde can help?

Thanks in advanced,

Raoni

structure(list(ID = c("10.700", "10.700", "10.700", "10.700",
"10.700", "100.700", "100.700", "100.700", "100.700", "100.700",
"100.700", "100.700"), kmr = c(314.2, 278.74, 278.74, 278.74,
278.74, 269.94, 278.74, 314.2, 278.74, 278.74, 255.4, 255.1),
    movimento = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
    NA)), .Names = c("ID", "kmr", "movimento"), row.names = c(5L,
1L, 2L, 3L, 4L, 494L, 500L, 499L, 495L, 498L, 496L, 497L), class = "data.frame")

-- 
Raoni Rosa Rodrigues
Research Associate of Fish Transposition Center CTPeixes
Universidade Federal de Minas Gerais - UFMG
Brasil
rodrigues.raoni at gmail.com



More information about the R-help mailing list