R dplyr解析条件过滤器中的变量

R dplyr resolve variable in conditional filter

我正在尝试根据变量值进行过滤,并且尝试了 filter_、点和引号的多种组合都无济于事。

举个例子,我有一个

runlist = c(1, 2, 3, 4, 5) 

和一个数据框 boo

run <- rep(seq(5), 3)
edge1 <- sample(20, 15)
edge2 <- sample(20, 15)
weights <- sample(50, 15)
boo <- as.data.frame(cbind(run, edge1, edge2, weights))

我想过滤一个名为 boo 的数据框,它看起来像 迭代为

for (i in runlist) {
    bop <- boo %>% filter( run == i )
    str(boo)
}

我怀疑我会听说不使用 for 循环和 R,而是使用 group_by(run),但我将此数据发送到 igraph 并且需要进一步将数据集子集化为边和权重,从而丢失分组变量,如

bop <- boo %>% filter( run == i ) %>% select( edge1, edge2, weights )

我将创建一个网络图并找出每个 运行 的密度和中心值。

bing <- graph.data.frame(bop)

如何让条件过滤器中的 i 解析为正确的索引?

我的回答与 "resolving a variable in a conditional filter" 无关,但有一种更简单的方法可以做您想做的事。

主要的想法是根据变量 run 拆分数据框,并将一个函数映射到每个部分。此函数获取一段数据框并吐出一个 igraph。

以下代码完成上述操作,将图表列表存储在列 graph 中。 (这是一个列表列,在 R for data science book 中查看更多信息)

boo %>%
  group_by(run) %>%
  nest() %>%
  mutate(graph = map(data, function(x) graph.data.frame(x %>% select(edge1, edge2, weights)))) %>%
  mutate(density = map(graph, function(x) graph.density(x))