这是我的前4行数据;
X...Country.Name Country.Code Indicator.Name
1 Turkey TUR Inflation, GDP deflator (annual %)
2 Turkey TUR Unemployment, total (% of total labor force)
3 Afghanistan AFG Inflation, GDP deflator (annual %)
4 Afghanistan AFG Unemployment, total (% of total labor force)
Indicator.Code X2010
1 NY.GDP.DEFL.KD.ZG 5.675740
2 SL.UEM.TOTL.ZS 11.900000
3 NY.GDP.DEFL.KD.ZG 9.437322
4 SL.UEM.TOTL.ZS NA我希望我的数据被重塑为两列,每个指标代码一列,并且我希望每一行对应一个国家,类似这样;
Country Name NY.GDP.DEFL.KD.ZG SL.UEM.TOTL.ZS
Turkey 5.6 11.9
Afghanistan 9.43 NA我想我可以用Excel做到这一点,但我想学习R的方法,这样我就不需要在每次遇到问题时都依赖excel。Here is dput的数据,如果你需要它。
编辑:我实际上想要3列,一个为每个指标和一个国家的名称。
发布于 2013-01-28 20:40:39
坚持使用基数R,使用reshape。我擅自清理了列名。在这里,我只向您展示了几行输出。删除head以查看完整输出。这里假设你的data.frame名为"mydata“。
names(mydata) <- c("CountryName", "CountryCode",
"IndicatorName", "IndicatorCode", "X2010")
head(reshape(mydata[-c(2:3)],
direction = "wide",
idvar = "CountryName",
timevar = "IndicatorCode"))
# CountryName X2010.NY.GDP.DEFL.KD.ZG X2010.SL.UEM.TOTL.ZS
# 1 Turkey 5.675740 11.9
# 3 Afghanistan 9.437322 NA
# 5 Albania 3.459343 NA
# 7 Algeria 16.245617 11.4
# 9 American Samoa NA NA
# 11 Andorra NA NAbase R中的另一个选项是xtabs,但NA被替换为0
head(xtabs(X2010 ~ CountryName + IndicatorCode, mydata))
# IndicatorCode
# CountryName NY.GDP.DEFL.KD.ZG SL.UEM.TOTL.ZS
# Afghanistan 9.437322 0.0
# Albania 3.459343 0.0
# Algeria 16.245617 11.4
# American Samoa 0.000000 0.0
# Andorra 0.000000 0.0
# Angola 22.393924 0.0xtabs的结果是一个matrix,所以如果您想要一个data.frame,可以用as.data.frame.matrix包装输出。
https://stackoverflow.com/questions/14562089
复制相似问题