фильтр dplyr и цикл for в R

#r #loops #for-loop #filter #dplyr

#r #циклы #цикл for #Фильтр #dplyr

Вопрос:

Все структуры данных являются фреймами данных. Я написал, используя синтаксис dplyr в R. Я хочу заменить этот код на цикл for.

 rbind(
query0226 %>% 
  filter(t1.cate == tb0226_cate_below_100$Var1[1]) %>% select(t1.query, t1.cate),
query0226 %>% 
  filter(t1.cate == tb0226_cate_below_100$Var1[2]) %>% select(t1.query, t1.cate),
query0226 %>% 
  filter(t1.cate == tb0226_cate_below_100$Var1[3]) %>% select(t1.query, t1.cate),
query0226 %>% 
  filter(t1.cate == tb0226_cate_below_100$Var1[4]) %>% select(t1.query, t1.cate),
query0226 %>% 
  filter(t1.cate == tb0226_cate_below_100$Var1[5]) %>% select(t1.query, t1.cate),
query0226 %>% 
  filter(t1.cate == tb0226_cate_below_100$Var1[6]) %>% select(t1.query, t1.cate)
)
  

Итак, я написал приведенный ниже код, но он не работает.
Какая часть неверна?

 for (i in 1:length(tb0226_cate_below_100$Var1)){
  rbind(
    query0226 %>% 
      filter(t1.cate == tb0226_cate_below_100$Var1[i]) %>% select(t1.query, t1.cate)
  )
}
  

Комментарии:

1. Но зачем вам это делать? Возможно, я упускаю суть, но вместо rbind добавления подмножеств query0226 , которые вы хотите сохранить, не было бы намного быстрее (и аккуратнее) отфильтровывать записи, которые вы не хотите сохранять? Это также устранило бы необходимость в этом несколько неудобном for цикле. Опять же, возможно, я неправильно понял, но это кажется очень не tidyverse похожим способом ведения дел.

Ответ №1:

Вы могли бы сделать

 temp <- data.frame()
for (i in unique(tb0226_cate_below_100$Var1)){
  temp = rbind(temp, query0226 %>% filter(t1.cate == i) %>% select(t1.query,t1.cate))
}
  

и теперь temp это окончательный фрейм данных. Вы можете удалить unique if Var1 , содержащий только уникальные записи.

Проверил это с помощью mtcars dataset

 rbind(
   mtcars %>% filter(cyl ==4) %>% select(mpg, disp), 
   mtcars %>% filter(cyl ==6) %>% select(mpg, disp), 
   mtcars %>% filter(cyl ==8) %>% select(mpg, disp)
)

temp <- data.frame()
for (i in unique(mtcars$cyl)){
   temp = rbind(temp,mtcars %>% filter(cyl==i) %>% select(mpg, disp))
}