Necesito filtrar un data.frame por otro data.frame para insertar NA valores. La parte que falta aquí es cómo hacer esto sin el bucle. Creo que el siguiente ejemplo simplificado debe ser autoexplente:

rm(list = ls())
set.seed(214)
suppressPackageStartupMessages(library(tidyverse))

mydata <- tibble(V1 = runif(100), V2 = runif(100), V3 = runif(100), V4 = runif(100))
myfilter <- tibble(F1 = runif(100), F2 = runif(100), F3 = runif(100), F4 = runif(100))

fltr <- myfilter > 0.8
mydata_filtered <- mydata

for (i in 1:nrow(mydata)) {
  mydata_filtered[i, which(fltr[i,])] <- NA
}

Hay muchas preguntas similares que respondieron, pero no puedo obtener la pista cómo insertar los valores NA deseados sin usar un bucle. La mayoría de las preguntas respondidas se ocupan de distintas columnas o filas, o el resultado requerido es solo un subconjunto de la originalmente data.frame.

Entonces, la salida sería así:

> mydata
# A tibble: 100 x 4
      V1      V2    V3    V4
   <dbl>   <dbl> <dbl> <dbl>
 1 0.320 0.332   0.705 0.975
 2 0.932 0.592   0.653 0.526
 3 0.516 0.00137 0.848 0.983
 4 0.420 0.751   0.189 0.742
 5 0.842 0.837   0.588 0.166

> fltr
          F1    F2    F3    F4
  [1,] FALSE  TRUE FALSE  TRUE
  [2,] FALSE FALSE FALSE  TRUE
  [3,] FALSE FALSE FALSE FALSE
  [4,]  TRUE  TRUE FALSE FALSE
  [5,] FALSE  TRUE  TRUE FALSE

# A tibble: 100 x 4
       V1       V2     V3     V4
    <dbl>    <dbl>  <dbl>  <dbl>
 1  0.320 NA        0.705 NA    
 2  0.932  0.592    0.653 NA    
 3  0.516  0.00137  0.848  0.983
 4 NA     NA        0.189  0.742
 5  0.842 NA       NA      0.166

0
Pelle 1 jul. 2019 a las 18:36

1 respuesta

La mejor respuesta

Creo que esto debería funcionar:

mydata[fltr] <- NA
3
Flavia 1 jul. 2019 a las 15:45