2013-08-23 2 views
2

지난 6 개월 동안 통계 보고서를 생성하려면 R을 사용하고 있습니다.다음 데이터 프레임을 변환하는 방법 R

입력 DataFrame : 나는 아래에 언급 한 바와 같이 요구 사항을 가지고

FY_Qtr  region  Lic_type revenue 
2009 Q1   AP  NCV  126.67 
2010 Q1   NA  NCV  395.80 
2011 Q1   LA  NCV  469.10 
2012 Q1   EMEA  MR  173.85 
2013 Q1   JAPAN MR  140.24 

예상 데이터 :

FY_Qtr  AP.NCV NA.NCV LA.NCV EMEA.MR JAPAN.MR 
2009 Q1  126.67 -   -  -  - 
2010 Q1  -  395.80  -  -  - 
2011 Q1  -  -   469.10 -  - 
2012 Q1  -  -   -  173.85 - 
2013 Q1  -  -   -  -  140.24 

어느 한이 예상 데이터를 얻기 위해이 나를 도와 드릴까요?

답변

6

정확히 'reshape2'패키지가 빌드 된 작업 유형입니다.

설정 : 샘플 데이터를로드 해 봅시다.

data <- read.table(text=" 
    FY_Qtr  region  Lic_type revenue 
    '2009 Q1'   'AP'  NCV  126.67 
    '2010 Q1'   'NA'  NCV  395.80 
    '2011 Q1'   'LA'  NCV  469.10 
    '2012 Q1'   'EMEA'  MR  173.85 
    '2013 Q1'   'JAPAN' MR  140.24 
    ", header=TRUE) 

캐스트 데이터 : 기본적으로 당신이 지금 간주됩니다 것을 "녹"데이터입니다. 변수 조합의 모든 세트와 할당 된 값에 대해 별도의 행이있는 ID 열이 있습니다. 우리가 출력 A를 원하는 있기 때문에, 우리는 'dcast'기능을 사용하고

library(reshape2) 

dcast(data, FY_Qtr ~ region + Lic_type, value.var='revenue') 

# FY_Qtr AP_NCV EMEA_MR JAPAN_MR LA_NCV NA_NCV 
# 1 2009 Q1 126.67  NA  NA  NA  NA 
# 2 2010 Q1  NA  NA  NA  NA 395.8 
# 3 2011 Q1  NA  NA  NA 469.1  NA 
# 4 2012 Q1  NA 173.85  NA  NA  NA 
# 5 2013 Q1  NA  NA 140.24  NA  NA 

:이 먼저 데이터를 용융의 ​​일반적인 'reshape2'단계를 건너 뛰고과 같이, 주조로 바로 건너 뛸 수 있다는 것을 의미합니다 데이터 프레임. 그런 다음 녹은 데이터를 입력으로 지정합니다. 다음 부분에서는 ID (FY_Qtr)를 지정하는 '~'방정식의 왼쪽과 사용할 열 변수 조합을 지정하는 '~'의 오른쪽을 사용하여 데이터를 연결하는 방법에 대해 설명합니다. 'value.var'인수는 값으로 사용할 변수를 (문자열로) 지정합니다.

+0

괜찮 았어. verymuch 감사합니다! :) – user2661475

+1

@ user2661475 기쁘다 기쁘다! 답변 옆에있는 체크 표시를 클릭하여 문제를 해결할 수있는 해결책이 있음을 나타냅니다. – Dinre

2

+1 to @Dinre; 그것은 좋은 해결책이며, reshape2를 배울 가치가 있습니다. 당신이 R베이스에서 어떻게 할 수 있는지보고 싶다면 너무 어렵지 않다.

data <- read.table(text="FY_Qtr  region  Lic_type revenue 
         '2009 Q1'   'AP'  NCV  126.67 
         '2010 Q1'   'NA'  NCV  395.80 
         '2011 Q1'   'LA'  NCV  469.10 
         '2012 Q1'   'EMEA'  MR  173.85 
         '2013 Q1'   'JAPAN' MR  140.24", 
        header=TRUE) 


expected_data   <- matrix(NA, nrow=5, ncol=5) 
rownames(expected_data) <- data$FY_Qtr 
colnames(expected_data) <- with(data, paste(region, Lic_type, sep=".")) 
diag(expected_data)  <- data$revenue 
expected_data 
     AP.NCV NA.NCV LA.NCV EMEA.MR JAPAN.MR 
2009 Q1 126.67  NA  NA  NA  NA 
2010 Q1  NA 395.8  NA  NA  NA 
2011 Q1  NA  NA 469.1  NA  NA 
2012 Q1  NA  NA  NA 173.85  NA 
2013 Q1  NA  NA  NA  NA 140.24 
관련 문제