具有子集和变量名分配的简单循环

时间:2018-08-28 05:39:39

标签: r loops filter dplyr subset

我实际上正在学习R,但我不明白为什么这个简单的作业不起作用。我想按年使用 dplyr 包的过滤器功能进行分组。经过几次尝试,这是使用 gapminder 数据集的可复制示例。

我可以使用子集函数,lapply甚至是匿名函数来解决此问题,但是在这里,我只想了解为什么此特定代码无法正常工作。

library(gapminder)
library(dplyr)

for (i in unique(gapminder$year)) {
paste0("gapminder", i) <- print(gapminder %>%
         filter(year == i))
}

有或没有打印,同样的问题

2 个答案:

答案 0 :(得分:1)

这是因为您的分配是要分配给功能(paste0)的。

如果删除该部分,它将打印每个过滤的数据帧:

library(gapminder)
library(dplyr)

for (i in unique(gapminder$year)) {
  print(gapminder %>% filter(year == i))
}

您可以将每个分配给一个list,如下所示:

my_list <- list()

library(gapminder)
library(dplyr)

for (i in seq_along(unique(gapminder$year))) {
  year_filter <- unique(gapminder$year)[i] # each iteration we get another year
  my_list[[i]] <- gapminder %>% filter(year == year_filter)
  cat(paste0("gapminder", year_filter, " ")) # use cat if you want to print at each iteration
}

paste0只是在转换为字符后将向量串联起来。

答案 1 :(得分:0)

使用分配功能存储输出。

});

如果要获取特定的输出,请使用 get 函数。

for (i in unique(gapminder$year)) 
{
    assign(paste0("gapminder", i),print(gapminder %>%filter(year == i)))
}