2013-11-09 40 views
0

我是一個R和堆棧溢出新手,所以希望我在這裏遵循協議。R變換數據框(分組)

如何轉變就像一個數據幀:提前

NAME AGE APPLES ORANGES 
Joe  13 5  6 
Mary 10 2  4 

感謝:

FRUIT NUMBER NAME AGE 
apples 5  Joe  13 
oranges 6  Joe  13 
apples 2  Mary 10 
oranges 4  Mary 10 

到分組數據成名等。

+1

您好,歡迎來SO!感謝您發佈最小示例數據集和您期望的答案,因爲您提到了SO協議,因此您可以閱讀[關於Stackoverflow](http://stackoverflow.com/about)和[請問](http:// stackoverflow.com/help/on-topic)。如果你表明你已經嘗試過自己,那麼人們通常更願意提供幫助,例如你迄今試過的代碼以及爲什麼它不起作用。乾杯。 – Henrik

回答

2

您可以使用包reshape2中的函數dcast

> library('reshape2') 
> d <- read.table(header=T, text="FRUIT NUMBER NAME AGE 
+ apples 5  Joe  13 
+ oranges 6  Joe  13 
+ apples 2  Mary 10 
+ oranges 4  Mary 10"); 


> dcast(d, NAME + AGE ~ FRUIT, value.var='NUMBER') 
    NAME AGE apples oranges 
1 Joe 13  5  6 
2 Mary 10  2  4 

這種情況正在改變從(有點)長格式深格式的數據,你可以找到如何處理這個任務here更多細節。

+0

完美。非常感謝 – kc2819

0

使用sqldf

library(sqldf) 
sqldf('SELECT NAME, AGE, 
     MAX(CASE WHEN FRUIT = "apples" THEN NUMBER ELSE NULL END) apples, 
     MAX(CASE WHEN FRUIT = "oranges" THEN NUMBER ELSE NULL END) oranges 
     FROM d 
     GROUP BY NAME 
     ORDER BY NAME') 

輸出:

NAME AGE apples oranges 
1 Joe 13  5  6 
2 Mary 10  2  4