2017-02-15 11 views
1

2つの列が要素(409レベル)である大規模なデータセット(9.000.000エントリ)があります。 これは、一定期間の空港間のフライトを表します。 下記のデータセットは既に変換後です。 "ORIGIN"と "DEST"がその数値形式であることを意味します。ファクタ変数を数値に変換し、数値を返します。

ORIGIN DEST weight  alpha 
     1 24 1195 1.512274e-04 
     1 78 844 2.557285e-03 
    100 2 1615 3.176266e-17 
    100 3 4196 9.111249e-09 
    100 7 1221 6.471515e-10 
    100 12 725 2.129114e-04 

2番目のデータセットは、緯度と経度を含むすべてのIATAコードを持ちます。

  City IATA Latitude Longitude 
     Goroka GKA -6.081690 145.392 
     Madang MAG -5.207080 145.789 
    Mount Hagen HGU -5.826790 144.296 
     Nadzab LAE -6.569803 146.726 
    Port Moresby POM -9.443380 147.220 
      Wewak WWK -3.583830 143.669 

電流の流れは以下の通りです:

  1. 適用IGRAPH
  2. にdata.set変換
  3. (私は後で そのようにそれらを必要とするよう)の数値に2列に変換フィルタリングアルゴリズム(列が数値なので)
  4. 再度データセットに変換します。

私の問題は、2番目のデータセットから緯度と経度が必要になるため、以前の要因に戻って私が持っている数値を変換したかったということです。

アイデア?私は考えることができるすべてを試しました。

+0

as.factorは機能しませんでしたか? – Alos

+0

as.numeric(as.character(factor(c(1,100,23,47))))。 は、それが数値レベルを与えるようにしています。文字に変換してから数値に変換してください。そうすれば 'as.numeric(as.character(df $ ORIGIN))'のようになります.dfはデータです。フレーム – infominer

答えて

0

数値に要因を強制する前に、数値因子ラベルのペアのルックアップテーブルを作成します。
の例では、私が言っているものをクリアします。ワークフローの最後に、因子ラベルをデータにマージして戻します。

library(dplyr) 
data(warpbreaks) 
original <- warpbreaks 

value_label_map <- warpbreaks %>% 
    select(wool, tension) %>% 
    mutate(wool_num = as.numeric(wool), tension_num = as.numeric(tension)) %>% 
    distinct() 

warpbreaks <- warpbreaks %>% 
    mutate(wool = as.numeric(wool), tension = as.numeric(tension)) 

warpbreaks <- left_join(warpbreaks, value_label_map, 
    by = c("wool" = "wool_num", "tension" = "tension_num")) 

identical(original$wool, warpbreaks$wool.y) 
identical(original$tension, warpbreaks$tension.y) 
+0

ありがとうございます。 これは実際に私の問題を解決しました。問題は、(フィルタリングアルゴリズムのために)最後に2つのdata.setsを一致させる方法を見つけることを試みていたことです。私は常に少ないカラムで終わります。 しかしあなたの方法はそれを完全に解決しました。 ありがとう本当に:D。これは私を大規模な頭痛から救った。 – FilipeTeixeira

+0

それを聞いてうれしい!乾杯。 – effel

1

私はas.numericに変換する前に因子レベルを保存してから、因子クラスを復元​​するときに再適用します。

data(iris) 
# Store the levels 
l<-levels(iris$Species) 

# Convert to numeric 
iris$Species <- as.numeric(iris$Species) 
head(iris$Species) 
class(iris$Species) 

# Convert back to factor 
iris$Species <- factor(iris$Species, labels = l) 
head(iris$Species) 
class(iris$Species) 
関連する問題