【问题标题】:Reshaping panel data重塑面板数据
【发布时间】:2014-10-10 17:53:01
【问题描述】:

我需要重塑我的数据以进行面板数据分析。我搜索了互联网,才发现如何使用 Stata 获得所需的结果;但是我应该使用 R 和 Excel。

我的初始数据和最终数据(期望的结果)看起来与使用 Stata 重塑数据示例的第一页中给出的非常相似。 http://spot.colorado.edu/~moonhawk/technical/C1912567120/E220703361/Media/reshape.pdf

用 R 或 Excel 可以实现吗?我尝试使用 reshape2 库中的 melt 函数,但我得到了

      CountryName  ProductName Unit Years    value
1     Belarus databaseHouseholds '000 Y1977 2942.702
2     Belarus databasePopulation '000 Y1977 9434.200
3     Belarus databaseUrbanPopulation '000 Y1977 4946.882
4     Belarus databaseRuralPopulation '000 Y1977 4487.318
5     Belarus originalHouseholds '000 Y1977       NA
6     Belarus originalUrban households '000 Y1977       NA
7     Poland ..............................................
...........................................................

当我想得到这样的东西时:

CountryName  Years  databaseHouseholds databasePopulation databaseUrbanPopulation databaseRuralPopulationUnit originalHousehold originalUrbanhouseholds
Belarus

在databaseHouseholds、databasePopulation、...列中应该是它们各自的值,所以我可以使用数据集进行面板建模。 非常感谢。

【问题讨论】:

  • 最好使用dput显示数据。例如。 dput(head(data,10))(就像我在下面展示了dput 的输出一样)。

标签: r excel dataset panel stata


【解决方案1】:

试试:

 library(reshape2)
 dcast(dat, CountryName+Years+Unit~ProductName, value.var="value")
 #    CountryName Years Unit databaseHouseholds databasePopulation
 #1     Belarus Y1977    0           2942.702             9434.2
 #   databaseRuralPopulation databaseUrbanPopulation originalHouseholds
 #1                4487.318                4946.882                 NA
 #  originalUrban households
 # 1                       NA

数据

dat <- structure(list(CountryName = c("Belarus", "Belarus", "Belarus", 
"Belarus", "Belarus", "Belarus"), ProductName = c("databaseHouseholds", 
"databasePopulation", "databaseUrbanPopulation", "databaseRuralPopulation", 
"originalHouseholds", "originalUrban households"), Unit = c(0L, 
 0L, 0L, 0L, 0L, 0L), Years = c("Y1977", "Y1977", "Y1977", "Y1977", 
 "Y1977", "Y1977"), value = c(2942.702, 9434.2, 4946.882, 4487.318, 
 NA, NA)), .Names = c("CountryName", "ProductName", "Unit", "Years", 
 "value"), class = "data.frame", row.names = c("1", "2", "3", 
 "4", "5", "6"))

【讨论】:

  • 非常感谢,正是我要找的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-09
  • 1970-01-01
  • 2012-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多