แปลงข้อมูลแบบยาวเป็นอาร์เรย์สามมิติใน R

ฉันมีข้อมูลบางอย่างที่มีลักษณะเช่นนี้:

> 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
[...]

ข้อมูลจะครบถ้วนในแง่ที่ว่าแต่ละประเทศ อัตราการไหล และประเภทเชื้อเพลิงจะถูกนำเสนอ

ฉันต้องการแปลงสิ่งนี้ให้เป็นอาร์เรย์สามมิติ โดยประเทศเป็นตัวแทนของมิติหนึ่ง ไหลอีกมิติหนึ่ง และประเภทเชื้อเพลิงเป็นมิติที่สาม ดังนั้นฉันจึงสามารถอ้างอิงข้อมูล X[a,b,c] โดยที่ b และ c เป็นค่าจำนวนเต็มตามลำดับของปัจจัย CountryCode, Flow และ FuelType ของฉัน

ดังนั้นสิ่งที่ฉันกำลังมองหาคือข้อมูล 'กว้าง' ในรูปแบบหลายมิติ


person Stephen Stretton    schedule 18.04.2020    source แหล่งที่มา


คำตอบ (1)


ทางเลือกหนึ่งคือ xtabs จาก 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

เราสามารถแยกแต่ละองค์ประกอบด้วยดัชนีตำแหน่งหรือคีย์ได้

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

หรือกับ tapply

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

ข้อมูล

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
ขอบคุณ! ไม่เคยได้ยินเกี่ยวกับ xtabs! มีประโยชน์สุดๆ! - person Stephen Stretton; 19.04.2020