2009-07-23 78 views
15

Tôi có dữ liệu xuất phát từ DB theo cách bình thường với trường trong năm, trạng thái và giá trị.Chuyển đổi dữ liệu từ nhiều hàng sang nhiều cột

Tôi muốn phân tích dữ liệu và cần định dạng mỗi năm là trường và không phải là bản ghi. Tôi muốn dữ liệu trong đó mỗi bản ghi là trạng thái và sau đó có trường cho mỗi năm và mỗi trường giá trị cho các trường đó là giá trị của năm đó và trạng thái đó.

Có lệnh nào để thực hiện việc này không?

Vì vậy, tôi có:

State Year Value 
    KY 1998  56 
    KY 1997  78 
    IL 1998  48 
    IL 1997  72 

và tôi muốn:

State 1997_value 1998_value 
    KY   78   56 
    IL   72   48 

Trả lời

18

Bạn muốn sử dụng các chức năng reshape().

reshape(data, idvar="State", timevar="Year", direction="wide") 
5

Một lựa chọn khác là sử dụng Reshape gói, được tạo ra bởi không thể bắt chước Hadley Wickham:

library(reshape) 

tuna<-melt(data,id.vars=c("State","Year")) 

cast(tuna,State~Year~variable) 
2

Bạn thậm chí có thể kết hợp nóng chảy và đúc dòng thành một gọi hàm Recast.

ds <- data.frame(State = c("KY", "KY", "IL", "IL"), 
Year = c(1998, 1997, 1998, 1997), 
Value = c(56, 78, 48, 72)) 

library(reshape) 
recast(ds, State ~ Year, id.var = c("State", "Year")) 
+0

Trong trường hợp này, dữ liệu đã ở dạng nóng chảy, vì vậy bạn chỉ cần bỏ qua bước tan chảy. – hadley

Các vấn đề liên quan