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