【问题标题】:dplyr filter and for loop in RR中的dplyr过滤器和for循环
【发布时间】:2019-07-28 20:47:20
【问题描述】:

所有数据结构都是数据帧。 我在 R 中使用 dplyr 语法编写过。 我想用 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)
  )
}

【问题讨论】:

  • 但是你为什么要这样做呢?也许我错过了重点,但不是要保留 rbinding 的 query0226 的子集,过滤掉不想保留的条目不是更快(更整洁)吗?这也将消除对这个有点尴尬的for 循环的需要。同样,也许我误解了,但这似乎是一种非常不像tidyverse 的做事方式。

标签: r loops for-loop filter dplyr


【解决方案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 是最终的数据帧。如果Var1 仅有唯一记录,您可以删除unique

使用mtcars 数据集验证它

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

【讨论】:

    猜你喜欢
    • 2015-11-26
    • 1970-01-01
    • 2021-12-13
    • 2019-07-14
    • 2019-07-13
    • 2016-06-28
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多