R dplyr разрешить переменную в условном фильтре

Я пытаюсь фильтровать на основе значения переменной, и пробовал несколько комбинаций filter_, точек и кавычек безрезультатно.

В качестве примера у меня есть

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

и кадр данных бу

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)
}

Я подозреваю, что я буду слышать о не использовать для циклов и R, а лучше использовать group_by(run)но я отправляю эти данные igraph и необходимо дополнительно установить подмножество набора данных только на ребра и веса, потеряв таким образом переменную группировки, как в

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

Я создам сетевой график и найду значения плотности и центральности для каждого прогона.

bing <- graph.data.frame(bop)

Как я могу получить i в условном фильтре разрешить как правильный индекс?

1 ответ

Решение

Мой ответ не о "разрешении переменной в условном фильтре", но есть гораздо более простой способ сделать то, что вы хотите.

Большая идея состоит в том, чтобы разделить фрейм данных на основе переменной runи сопоставьте функцию на каждую из этих частей. Эта функция берет часть фрейма данных и выплевывает igraph.

Следующий код выполняет вышеуказанное, сохраняя список графиков в столбце graph, (Это список-столбец, см. Больше в книге R для науки о данных)

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))
Другие вопросы по тегам