2016-06-28 308 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