现在我有一个这样的数据集:
country index value
1 AUS GPD 0.8004142
2 AUS GNI 0.8251010
3 AUS CPI 0.6675700
4 HUN GPD 0.3520509
5 HUN GNI 0.4821505
6 HUN CPI 0.3623341
7 USA GPD 0.6431452
8 USA GNI 0.9119910
9 USA CPI 0.6616684
然后我使用subset和merge命令重建数据,如下所示
gdp<-subset(x,index=="GDP")# subset by index
> gdp
country index value
1 AUS GDP 0.8004142
4 HUN GDP 0.3520509
7 USA GDP 0.6431452
names(gdp)[3]<-"GDP" # rename 'value' to 'GDP'
gdp<-gdp[c(-2)]
gni<-subset(x,index=="GNI")
names(gni)[3]<-"GNI"
gni<-gni[c(-2)]
cpi<-subset(x,index=="CPI")
names(cpi)[3]<-"CPI"
cpi<-cpi[c(-2)]
total<-merge(gdp, gni, by="country")
total1<-merge(total, cpi, by="country")
> total1
country GDP GNI CPI
1 AUS 0.8004142 0.8251010 0.6675700
2 HUN 0.3520509 0.4821505 0.3623341
3 USA 0.6431452 0.9119910 0.6616684
我正在寻找一种简单的方法来重建这样的数据。 请提供一些建议(示例代码)。非常感谢任何帮助。
答案 0 :(得分:2)
这是一个非常基本的“重塑”问题。
最直接的方法是使用“reshape2”中的dcast
:
> library(reshape2)
> dcast(mydf, country ~ index)
country CPI GNI GPD
1 AUS 0.6675700 0.8251010 0.8004142
2 HUN 0.3623341 0.4821505 0.3520509
3 USA 0.6616684 0.9119910 0.6431452
或者,在基数R中,有xtabs
。 xtabs
输出matrix
,因此使用as.data.frame.matrix
来获取data.frame
。
> as.data.frame.matrix(xtabs(value ~ country + index, mydf))
CPI GNI GPD
AUS 0.6675700 0.8251010 0.8004142
HUN 0.3623341 0.4821505 0.3520509
USA 0.6616684 0.9119910 0.6431452