前の行の値でデータフレームを並べ替えたい。そのため、「開始点」と「終了点」の2つの列があります。
ここで、特定の「エンドポイント」を持つ各行の後に「スタートポイント」内の同じ値を持つ行が続くように、行を並べ替えたいと思います。
例えば:
+------------+-----------+
| Startpoint | Endpoint |
+------------+-----------+
| Berlin | Munich |
| Munich | Paris |
| Paris | Barcelona |
| Barcelona | Rom |
+------------+-----------+
投稿ガイドラインに従わないopに答えるのは少し矛盾していますが、これは解決すべき興味深いパズルであることがわかりました。
同じ出発地(または目的地)で複数のフライト(フライトだと思います)がある、または「往復」するシリーズがあるなどの競合がない場合、無限のループに遭遇します、これが(やや驚くほど単純な)解決策です。
flights <- read.table(sep = ",", stringsAsFactors = FALSE, header = TRUE, text = "
dep,arr
Montreal,Washington
Berlin,Munich
Miami,Paris
Munich,New York
Barcelona,Rome
New York,Montreal
Washington,Miami
Paris,Barcelona
")
cont <- TRUE
while (cont) {
# move down a flight for which the dep is an arr further down
for (i in 1:(nrow(flights)-1)) {
ind <- which(flights$arr == flights$dep[i])
if (length(ind) == 0) next
if (ind > i) {
flights <- flights[c(seq_len(i-1),
(i+1):ind,
i,
seq(from = ind + 1,
length.out = nrow(flights) - ind)),]
break
}
cont <- FALSE
}
}
> flights
dep arr
2 Berlin Munich
4 Munich New York
6 New York Montreal
1 Montreal Washington
7 Washington Miami
3 Miami Paris
8 Paris Barcelona
5 Barcelona Rome
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加