2013-11-09 4 views
0

저는 R과 Stack Overflow 초보자입니다. 그래서 여기에 프로토콜을 따르길 희망합니다. 사전에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