0

这是我数据的前 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。如果需要,这是数据的输入。

编辑:我实际上想要 3 个列,一个用于每个指标,一个用于国家名称。

4

1 回答 1

4

坚持使用基础 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                   NA

基础 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.0

结果xtabs是 a matrix,所以如果你想要 a data.frame,用 包装输出as.data.frame.matrix

于 2013-01-28T12:40:38.857 回答