从 R 中的面板数据生成横截面

Generate cross-section from panel data in R

我有一个面板数据文件(长格式),我需要将其转换为截面数据。也就是说,我不仅需要转换为宽格式,而且我需要对每个人进行一次观察,其中包含每个变量的平均值。

这是我想要的:我在数据框中有面板数据(每个人的一些观察结果),我正在寻找一种在 R 中生成包含累积数据的新数据框的简单方法对于每个人,i。 e.每个变量中所有观察值的总和或其平均值。衡量波动率也可能很有趣。

例如,我有一个包含面板数据的给定数据框 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

现在这只是一个例子。我在许多变体中都需要这个特征,最重要的一个可能是每个变量的个体内均值。

有一些方法可以使用基础 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)