2013-08-23 24 views
2

我正在使用R來生成過去6個月的統計報告。我有一個要求,因爲下面提到:如何使用R轉換以下數據幀

輸入數據幀:

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) 

演員的數據:基本上你現在被認爲是什麼「回爐」的數據。對於每組變量組合和一個分配的值,您都有一個單獨的行。這意味着你可以跳過首先熔化數據的常用的「reshape2」步驟,直接跳到鑄造,像這樣:

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 

我們使用「dcast」功能,因爲我們想輸出數據幀。然後,我們將您的融化數據指定爲輸入。下一部分將介紹如何關聯數據,'〜'方程的左側指定ID(FY_Qtr),'〜'的右側指定要使用的列變量組合。 'value.var'參數然後指定(作爲一個字符串)要用作值的變量。

+0

它工作正常。非常感謝你! :) – 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