[英]How To Save Results Of A Nested Loop Separately For Each Unique Combination In R
如何保存嵌套循环的结果并单独保存到我的列表中?
我的data
看起来像这样:
> data
id factor
1 1 A
2 2 B
3 1 A
然后我创建一个包含 4 个列表的空向量,因为id
有 2 个唯一值, factor
有 2 个唯一值
data <- data.frame("id" = c(1, 2, 1), "factor" = c("A", "B", "A"))
empty <- vector(mode = "list", length = 4)
for(i in seq_along(unique(data$id))){
for (j in seq_along(unique(data$factor))) {
empty[[i*j]] <- data %>%
filter(id == unique(id)[i] & factor == unique(factor)[j])
}
}
empty[[1]]
> empty[[1]]
id factor
1 1 A
2 1 A
> empty[[2]]
[1] id factor
<0 rows> (or 0-length row.names)
empty[[1]]
有效,但从empty[[2]]
到empty[[3]]
给了我一个空列表。 我想我搞砸了empty[[i*j]]
部分。
我会用做expand.grid
建立在你的变量的所有唯一组合数据帧data
,然后运行一个简单for
循环在代表该数据帧行的序列。 所以:
combos <- with(data, expand.grid(id = unique(id), factor = unique(factor)))
empty <- vector(mode = "list", length = nrow(combos))
for (i in seq(nrow(combos))) {
empty[[i]] <- filter(data, id == combos$id[i] & factor == combos$factor[i])
}
这产生了这个列表:
> empty
[[1]]
id factor
1 1 A
2 1 A
[[2]]
[1] id factor
<0 rows> (or 0-length row.names)
[[3]]
[1] id factor
<0 rows> (or 0-length row.names)
[[4]]
id factor
1 2 B
如果要将空集的插槽保留为NULL
,则可以将过滤步骤放在if
语句中。
好吧,因为你没有empty[[2]]
和empty[[3]]
任何样本,因为它们对应于1 B
和2 A
,你应该得到
id factor
1 2 B
对于empty[[4]]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.