在过滤器中使用循环

时间:2017-04-14 08:47:49

标签: r loops dplyr

我是R的新手。使用dplyr和filter,我想选择一个变量列表的记录!= NA。

df %>% filter (var1 != "NA" | var2 != "NA" | var3 != "NA" )

问题是我有85个这样的变量(以HR结尾)。所以我已经提取它们并将它们放在一个载体中。

hr_variables <- grep("HR$", names(ssc), value=TRUE)

我想创建一个循环,通过将OR条件应用于每个元素来获取hr_variable然后filter()。 这可能在R?

1 个答案:

答案 0 :(得分:1)

我们可以使用base R更轻松地执行此操作

ssc[!rowSums(is.na(ssc[hr_variables])),]
#  col1_HR col2_HR      col3
#2       1       3 0.5365853
#3       2       4 0.4196231

或使用tidyverse

library(tidyverse)
ssc %>% 
   select_(.dots = hr_variables) %>%
   map(~is.na(.)) %>% 
   reduce(`|`) %>%
    `!` %>% 
   extract(ssc, .,)

complete.cases

ssc %>% 
     select_(.dots = hr_variables) %>% 
     complete.cases(.) %>% 
     extract(ssc, ., )

数据

set.seed(24)
ssc <- data.frame(col1_HR = c(NA, 1, 2, 3), col2_HR = c(NA, 3, 4, NA), col3 = rnorm(4))