按布尔数据框过滤数据框以插入NA

时间:2019-07-01 15:36:30

标签: r dataframe

我需要用另一个data.frame过滤data.frame才能插入NA值。这里缺少的部分是如何在没有循环的情况下执行此操作。我认为下面的简化示例应该是不言自明的:

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
}

回答了很多类似的问题,但是我不知道如何在不使用循环的情况下插入所需的NA值。大多数回答的问题都涉及不同的列或行,或者所需的结果只是原始data.frame的一部分。

因此,输出将是这样的:

> 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

1 个答案:

答案 0 :(得分:3)

我认为这应该可行:

mydata[fltr] <- NA