Фильтр dplyr не работает в цикле for - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть много столбцов, в которых я хочу избавиться от 3-х конкретных значений.Я хотел сделать это в цикле.Но по какой-то причине это не работает, и я не могу понять, почему.Вот функция:

for (i in colnames(df1)){
    z <- as.name(i)
    df1 <- df1 %>% filter(z != "Refusal") %>% filter(z != "Don't know") %>%  filter(z != "No answer")
}

Я знаю, что переменная z не нужна, но я надеялся, что это может помочь.Это не так.

А вот полный пример с кодом для каждого столбца.Это работает, но довольно раздражающее решение

df1 <- data.frame(country = df$cntry, gender = df$gndr, pplfair = df$pplfair,
                  gincdif = df$gincdif, happy = df$happy, sclmeet = df$sclmeet,
                  inprdsc = df$inprdsc, sclat = df$sclact, rlgbg = df$rlgblg, 
                  dfincac = df$dfincac, sblazy = df$sblazy, eduyrs = df$eduyrs,
                  imprich = df$imprich, iprspot = df$iprspot, impfun = df$impfun)

##Wrangling data

###from data removing no answer, don't know, refusal
df1 <- df1 %>% filter(pplfair != "Refusal") %>% filter(pplfair != "Don't know") %>%  filter(pplfair != "No answer")

df1 <- df1 %>% filter(gincdif != "Refusal") %>% filter(gincdif != "Don't know") %>%  filter(gincdif != "No answer")

df1 <- df1 %>% filter(happy != "Refusal") %>% filter(happy != "Don't know") %>%  filter(happy != "No answer")

df1 <- df1 %>% filter(sclmeet != "Refusal") %>% filter(sclmeet != "Don't know") %>%  filter(sclmeet != "No answer")

df1 <- df1 %>% filter(inprdsc != "Refusal") %>% filter(inprdsc != "Don't know") %>%  filter(inprdsc != "No answer")

df1 <- df1 %>% filter(sclat != "Refusal") %>% filter(sclat != "Don't know") %>%  filter(sclat != "No answer")

df1 <- df1 %>% filter(rlgbg != "Refusal") %>% filter(rlgbg != "Don't know") %>%  filter(rlgbg != "No answer")

df1 <- df1 %>% filter(dfincac != "Refusal") %>% filter(dfincac != "Don't know") %>%  filter(dfincac != "No answer")

df1 <- df1 %>% filter(sblazy != "Refusal") %>% filter(sblazy != "Don't know") %>%  filter(sblazy != "No answer")

df1 <- df1 %>% filter(eduyrs != "Refusal") %>% filter(eduyrs != "Don't know") %>%  filter(eduyrs != "No answer")

df1 <- df1 %>% filter(imprich != "Refusal") %>% filter(imprich != "Don't know") %>%  filter(imprich != "No answer")

df1 <- df1 %>% filter(iprspot != "Refusal") %>% filter(iprspot != "Don't know") %>%  filter(iprspot != "No answer")

df1 <- df1 %>% filter(impfun != "Refusal") %>% filter(impfun != "Don't know") %>%  filter(impfun != "No answer")

Буду очень признателен за любой совет.

1 Ответ

0 голосов
/ 20 февраля 2019
Код

OP можно значительно упростить, используя filter_all и %in%:

library(dplyr)

df1 %>% 
  filter_all(any_vars(!(. %in% c("Refusal", "Don't know", "No answer"))))

или filter_at, если это подмножество всех столбцов:

df1 %>% 
  filter_at(vars(varnames), any_vars(!(. %in% c("Refusal", "Don't know", "No answer"))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...