Skip to content
Prev 10819 / 15379 Next

[R-es] Encontrar la primera columna no NA

Pues parece que para este caso en particular es mejor la solucon con el for
vectorizado. Aunque la verdad que la tuyaes muy buena de cara compresion y
comprensión de codigo. Igual si tuviese mas columnas la solucin la tuya
sería más rápida. Tendré que mirarlo.

library(microbenchmark)
N <- 1e1
tabla <-
  microbenchmark(
    JVG ={
        apply(X = dat,  MARGIN = 1, FUN =
                 function(x){
                   return(   min(  which( !is.na(x)  ),  na.rm = TRUE ) )
                 }
        )
      dat[ , First_month := First_month]
      N_for <- length( unique(First_month ))
      for( j in 1:N_for){
        x <- dat[  First_month == j,  j,  with = FALSE]
        dat[ First_month == j , Value_First_month := x ]
      }
    },
    Olivier ={
      dat[,First_month       := apply(X = .SD,MARGIN = 1,FUN = function(x)
colnames(.SD)[min(which(!is.na(x)))])]
      dat[,Value_First_month := apply(X = .SD,MARGIN = 1,FUN = function(x)
x[min(which(!is.na(x)))])]
    },
    times = N, unit = "s")

tabla %>%  print
beepr::beep(3)

# Unit: seconds
#       expr      min       lq     mean   median       uq      max neval
# JVG        2.345127 2.440396 2.591505 2.509842 2.738680 3.013498    10
# Olivier    5.445869 5.454217 6.132737 6.212742 6.410948 7.008085    10


El 27 de octubre de 2016, 15:10, Olivier Nuñez <onunez en unex.es> escribió:
--