2016-06-28 75 views
0

我有一個面板數據文件(長格式),我需要將其轉換爲橫截面數據。那就是我不僅需要對寬格式進行轉換,而且每個人都需要一個包含每個變量平均值的觀察值。從面板數據中生成橫截面R

這是我想要的:我有一個數據框中的面板數據(每個人的觀察數量),我正在尋找一種簡單的方法在R中生成一個新的數據框,其中包含累積數據每個人,我。即要麼是每個變量的所有觀測值的總和,要麼是其平均值。衡量波動性可能也很有意思。

比如我有一個包含面板數據的給定數據幀panel_data:

> individual <- c(1,1,2,2,3,3) 
> var1 <- c(2,3,3,3,4,3) 
> panel_data <- data.frame(individual,var1) 
> panel_data 
    individual var1 
1   1 2 
2   1 3 
3   2 3 
4   2 3 
5   3 4 
6   3 3 

結果應該是這樣的:

> cross_data 
    individual var1 
1   1 5 
2   2 6 
3   3 7 

現在這只是一個例子。我需要多種多樣的特徵,最重要的特徵可能是每個變量的內部個體均值。

+0

歡迎來到SO!請閱讀:http://stackoverflow.com/help/mcve –

回答

0

有些方法可以使用base R或使用熱門軟件包data.tabledplyr來執行此操作。每個人都有自己的偏好和mine is dplyr

您可以非常方便地執行各種操作,以便您的每個人的個人數據爲summarise。使用dplyr語法,您首先需要group_by個體來指定應對由變量「individual」定義的組執行操作。然後您可以使用您指定的功能summarise您的組。

嘗試以下操作:

library("dplyr") 

panel_data %>% 
    group_by(individual) %>% 
    summarise(sum_var1 = sum(var1), mean_var1=mean(var1)) 

不要被%>%符號被推遲,它僅僅是一個方便快捷連鎖經營:

  • x %>% f相當於f(x)
  • x %>% f(a)相當於f(x, a)
  • x %>% f(a) %>% g(b)相當於g(f(x, a), b)
+0

非常感謝您的回覆。這似乎一般工作,但如果我嘗試將新的數據框存儲爲對象,我。即「cross_data < - summarize()」,我得到錯誤「總結_(.data,.dots = lazyeval :: lazy_dots(...))中的錯誤:參數」.data「丟失,沒有默認值。 summary()的參考文件說它需要輸入數據作爲第一個參數,但是如果我將面板數據框添加爲.data R告訴我「錯誤:data_frames只能包含1d原子向量和列表」。對這個問題的任何建議? – mango

+0

與'%>%'鏈接的三條線形成一個大的聲明。如果要保存輸出,則必須執行'cross_data < - panel_data%>%...%>%summarize(...)'。或者你可以這樣做,雖然有些人可能會對它皺眉:'panel_data%>%...%>%summarize(...) - > cross_data'。 –

+0

謝謝,只是想出了自己! – mango