【问题标题】:Generate cross-section from panel data in R [duplicate]从R中的面板数据生成横截面[重复]
【发布时间】:2016-06-28 14:06:21
【问题描述】:

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

这就是我想要的:我在数据框中有面板数据(每个人的一些观察结果),我正在寻找一种简单的方法在 R 中生成一个包含每个人的累积数据的新数据框个人岛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 panel


【解决方案1】:

有一些方法可以使用基础 R 或使用流行的包 data.tabledplyr。每个人都有自己的喜好和mine is dplyr

您可以非常轻松地对summarise您的个人数据执行各种操作。使用dplyr 语法,您首先group_by individual 指定应该对由变量“individual”定义的组执行操作。然后你可以使用你指定的函数summarise你的组。

尝试以下方法:

library("dplyr")

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

不要被%&gt;% 符号吓到,它只是链接操作的便捷快捷方式:

  • x %&gt;% f 等价于 f(x)
  • x %&gt;% f(a) 等价于 f(x, a)
  • x %&gt;% f(a) %&gt;% g(b) 等价于 g(f(x, a), b)

【讨论】:

  • 非常感谢您的回复。这似乎通常有效,但如果我尝试将新数据框存储为对象,即。 e. “cross_data
  • %&gt;% 链接的三行构成一个大语句。如果你想保存输出,你必须做cross_data &lt;- panel_data %&gt;% ... %&gt;% summarise(...)。或者你也可以这样做,尽管有些人可能会对此感到不满:panel_data %&gt;% ... %&gt;% summarise(...) -&gt; cross_data
  • 谢谢,我自己搞定了!
猜你喜欢
  • 1970-01-01
  • 2019-12-31
  • 2019-05-25
  • 2017-10-16
  • 2021-09-25
  • 2013-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多