2012-02-02 11 views
0

私は次のデータを持っています - 正規化されたデータベースからのダンプですが、データベースにアクセスすることはできず、データベース管理者はこれが必要でないと主張します。因子がrownameになるような変換行列

obs変数が具体的に

周りの「ピボット」に1別名、私は以下のnewdataデータフレームに、このolddataから行ってみたい、ユニークな観測IDです:

> olddata 
    species obs variable value 
3  ADFA 1  mean  4 
4  ADFA 1  lat 118 
5  ADFA 1  lon 49 
6  ADFA 1  masl 74 
96  HODO 8  mean 18 
97  HODO 8  lat 120 
98  HODO 8  lon 45 
99  HODO 8  masl 36 
189 HODO 9  mean 34 
190 HODO 9  lat 126 
191 HODO 9  lon 12 
192 HODO 9  masl 35 

私は考え以下のように見えるように、このデータフレームを再構築したい:

> newdata 
    species obs mean lat lon masl 
1 ADFA 1 4 118 49 74 
2 HODO 8 18 120 45 36 
3 HODO 9 34 126 12 35 

は免責事項:この可能性が高いが、前に頼まれました私はここで変換データフレーム/行列に関連する多くの質問


の間で問題を見つけることができません。この問題を再現する際に使用するためにデータフレーム、次のとおりです。ここで

olddata <- structure(list(species = c("ADFA", "ADFA", "ADFA", "ADFA", "HODO", 
      "HODO", "HODO", "HODO", "HODO", "HODO", "HODO", "HODO"), obs = c(1, 
      1, 1, 1, 8, 8, 8, 8, 9, 9, 9, 9), variable = c("mean", "lat", 
      "lon", "masl", "mean", "lat", "lon", "masl", "mean", "lat", "lon", 
      "masl"), value = c(4, 118, 49, 74, 18, 120, 45, 36, 34, 126, 
      12, 35)), .Names = c("species", "obs", "variable", "value"), 
      row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", 
       "11", "12"), class = "data.frame") 

newdata <- structure(list(species = c("ADFA", "HODO", "HODO"), obs = c(1, 
      8, 9), mean = c(4, 18, 34), lat = c(118, 120, 126), lon = c(49, 
      45, 12), masl = c(74, 36, 35)), .Names = c("species", "obs", 
      "mean", "lat", "lon", "masl"), row.names = c(NA, -3L), 
      class = "data.frame") 

答えて

2

は一例です:

> library(reshape2) 
> dcast(olddata, species+obs~variable) 
    species obs lat lon masl mean 
1 ADFA 1 118 49 74 4 
2 HODO 8 120 45 36 18 
3 HODO 9 126 12 35 34 
1
library(reshape2)  
dcast(olddata,species+obs~variable)