Ubah data Bentuk Panjang menjadi array tiga dimensi di R

Saya memiliki beberapa data yang terlihat seperti ini:

> ExampleData
# A tibble: 14,833 x 4
   CountryCode  Flow      FuelType     Value
   <fct>        <fct>     <fct>        <dbl>
 1 ALB          road      coa            0   
 2 ALB          services  coa            3.3
 3 ALB          manufact  coa          113.1  
 4 ALB          mining    coa            0  
 5 ALB          road      nga            0   
 6 ALB          services  nga            2.4
[...]

Datanya lengkap karena setiap kombinasi negara, aliran, dan jenis bahan bakar terwakili.

Saya ingin mengubahnya menjadi array tiga dimensi di mana negara mewakili satu dimensi, aliran dimensi lain dan jenis bahan bakar dimensi ketiga. Jadi saya bisa mereferensikan data X[a,b,c] di mana a b dan c adalah nilai integer masing-masing faktor CountryCode, Flow, dan FuelType saya.

Jadi yang saya cari adalah bentuk data 'lebar' multidimensi.


person Stephen Stretton    schedule 18.04.2020    source sumber


Jawaban (1)


Salah satu opsinya adalah xtabs dari base R

out <- xtabs(Value ~ CountryCode + Flow + FuelType, data = ExampleData)
out
#, , FuelType = coa

#           Flow
#CountryCode manufact mining  road services
#        ALB    113.1    0.0   0.0      3.3

#, , FuelType = nga

#           Flow
#CountryCode manufact mining  road services
#        ALB      0.0    0.0   0.0      2.4

Kita dapat mengekstrak elemen individual baik dengan indeks posisi atau kunci

out["ALB", "manufact", "coa"]
#[1] 113.1

Atau dengan tapply

tapply(ExampleData[['Value']], ExampleData[-4], FUN = I)

data

ExampleData <- structure(list(CountryCode = c("ALB", "ALB", "ALB", "ALB", "ALB", 
"ALB"), Flow = c("road", "services", "manufact", "mining", "road", 
"services"), FuelType = c("coa", "coa", "coa", "coa", "nga", 
"nga"), Value = c(0, 3.3, 113.1, 0, 0, 2.4)), 
class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6"))
person akrun    schedule 18.04.2020
comment
Terima kasih! Belum pernah mendengar tentang xtabs! Sangat membantu! - person Stephen Stretton; 19.04.2020