这里实际上不需要for循环。您可以使用dplyr::group_split
或split
根据一列中的值将数据帧分为数据帧列表:
library(dplyr)
group_split(dem2,Style.Brand) # dpylyr option
split(dem2,dem2$Style.Brand) # base R option
#### OUTPUT ####
$aa
Brand Week Units.Sold Style.Brand
1 a 8-20-2017 1 aa
$bb
Brand Week Units.Sold Style.Brand
2 b 8-20-2017 2 bb
$cc
Brand Week Units.Sold Style.Brand
3 c 8-20-2017 1 cc
$dd
Brand Week Units.Sold Style.Brand
4 d 8-20-2017 1 dd
$ee
Brand Week Units.Sold Style.Brand
5 e 8-20-2017 1 ee
$ff
Brand Week Units.Sold Style.Brand
6 f 8-20-2017 2 ff
,
通常,您应该首先使用vector
为列表分配足够的空间。在这里这并不是真正的问题,但是如果您拥有更多的数据,则不断增长的列表确实会降低R的速度。然后,您可以遍历cur$Style.Brand
的整数位置,将filter
的输出分配给i
的第df_list
个元素:
df_list <- vector(mode = "list",length = nrow(cur))
for (i in seq_along(cur$Style.Brand)) {
df_list[[i]] <- dplyr::filter(dem2,Style.Brand == cur$Style.Brand[i])
}
或者,您可以尝试使用lapply,这稍微简单一些:
lapply(cur$Style.Brand,function(s) dplyr::filter(dem2,Style.Brand == s))
这两个选项的输出应如下所示:
[[1]]
Brand Week Units.Sold Style.Brand
1 a 8-20-2017 1 aa
[[2]]
Brand Week Units.Sold Style.Brand
1 b 8-20-2017 2 bb
[[3]]
Brand Week Units.Sold Style.Brand
1 c 8-20-2017 1 cc
[[4]]
Brand Week Units.Sold Style.Brand
1 d 8-20-2017 1 dd
[[5]]
Brand Week Units.Sold Style.Brand
1 e 8-20-2017 1 ee
[[6]]
Brand Week Units.Sold Style.Brand
1 f 8-20-2017 2 ff
,
如何?
library(dplyr)
cur <- c("aa","bb","cc","dd","ee","ff")
dem2 <- data.frame(
`Brand` = c("a","b","c","d","e","f"),`Week` = c("8-20-2017","8-20-2017","8-20-2017"),`Units Sold` = c("1","2","1","2"),`Style-Brand` = c("aa","ff"))
dem <- list()
j = 1
for (i in cur) {
dem[[j]] <- dem2 %>% filter(Style.Brand == i)
j = j + 1
}
dem
本文链接:https://www.f2er.com/3163115.html