#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))
}