Подстановка фрейма данных в несколько других фреймов данных с использованием цикла - PullRequest
1 голос
/ 15 апреля 2020

У меня есть следующий фрейм данных с именем stationDF. https://i.stack.imgur.com/Ucph0.png

У меня также есть векторы from_nodes и to_nodes , from_nodes <- c(1, 156, 153, 3), to_nodes <- c(156, 153, 3, 185). Как вы можете видеть в кадре данных, эти векторы от и до соответствуют столбцам «от» и «до» в моей станции stationDF. Я пытаюсь установить подстановку этой станцииDF на основе этих векторов. Я попытался:

x1 <- stationDF[stationDF$from == from_nodes[1] & stationDF$to == to_nodes[1] |
                stationDF$from == to_nodes[1] & stationDF$to == from_nodes[1],]

Это суб-настройка моего фрейма данных всеми станциями, которые переходят с 1 на 156 или с 156 на 1. Следующее является выводом этого: https://i.stack.imgur.com/TLqv4.png.

Я хочу сделать это для остальных переменных в векторах from и to, но не в жестком коде. Например,

for (i in 1:length(from){
    x <- stationDF[stationDF$from == from_nodes[i] & stationDF$to == to_nodes[i] |
                   stationDF$from == to_nodes[i] & stationDF$to == from_nodes[i],]
}

Это, очевидно, не будет работать так, потому что перезапишет предыдущую итерацию, но это мыслительный процесс. Я хотел бы закончить с четырьмя различными подмножествами stationDF или даже с одним большим, если четыре не могут быть сделаны. Все помогает, спасибо.

1 Ответ

2 голосов
/ 15 апреля 2020

Простая модификация вашего кода, которую вы могли бы сделать без особых проблем, заключается в следующем:

x_ls <- list()
for (i in 1:length(from_nodes){
  x_ls[[i]] <- stationDF[stationDF$from == from_nodes[i] & stationDF$to == to_nodes[i] |
                         stationDF$from == to_nodes[i] & stationDF$to == from_nodes[i],]
}
x <- do.call('rbind', x_ls)

При этом каждый кадр данных будет выводиться с помощью l oop и сохраняться в списке. Затем в конце вы просто связываете все кадры данных в списке, используя функцию rbind , вызываемую с помощью do.call .

«do.call» - это просто функция, которая позволяет вам распаковать значения в качестве аргументов в другую функцию. В этом случае это будет синонимом rbind(x_ls[[1]], x_ls[[2]], x_ls[[3]], x_ls[[4]]).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...