我实际上正在学习R,但我不明白为什么这个简单的作业不起作用。我想按年使用 dplyr 包的过滤器功能进行分组。经过几次尝试,这是使用 gapminder 数据集的可复制示例。
我可以使用子集函数,lapply甚至是匿名函数来解决此问题,但是在这里,我只想了解为什么此特定代码无法正常工作。
library(gapminder)
library(dplyr)
for (i in unique(gapminder$year)) {
paste0("gapminder", i) <- print(gapminder %>%
filter(year == i))
}
有或没有打印,同样的问题
答案 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)))
}