首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何重塑这个复杂的数据框架?

如何重塑这个复杂的数据框架?
EN

Stack Overflow用户
提问于 2013-01-28 20:30:35
回答 1查看 104关注 0票数 0

这是我的前4行数据;

代码语言:javascript
复制
  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

我希望我的数据被重塑为两列,每个指标代码一列,并且我希望每一行对应一个国家,类似这样;

代码语言:javascript
复制
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列,一个为每个指标和一个国家的名称。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-28 20:40:39

坚持使用基数R,使用reshape。我擅自清理了列名。在这里,我只向您展示了几行输出。删除head以查看完整输出。这里假设你的data.frame名为"mydata“。

代码语言:javascript
复制
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

base R中的另一个选项是xtabs,但NA被替换为0

代码语言:javascript
复制
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的结果是一个matrix,所以如果您想要一个data.frame,可以用as.data.frame.matrix包装输出。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14562089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档