如何根据R中的变量转置数据帧?

时间:2015-10-30 15:54:45

标签: r transpose

我有一个这样的数据框:(数据)

Country IndicatorName 1960 1965
France Air 2 3
France Elec 9 10 
France Mobile 2 4 
Germany Air 50 43
Germany Elec 43 23
Germany Mobile 45 66
USA Air 87 2
USA Elec 19 81
USA Mobile 1 77

我想拥有这些数据以便绘制它:(data_new)

Years  Country Air Elect Mobile
1960 France 2 9 2
1960 Germany 50 43 45
1960 USA 87 19 1
1965 France 3 10 4
1965 Germany 43 23 66
1965 USA 2 81 77

我想转置(数据)以便拥有(data_new)。

我该怎么做?

1 个答案:

答案 0 :(得分:3)

我们可以使用gather/spread

中的tidyr重新塑造预期的格式
library(dplyr)
library(tidyr)
df1 %>% 
      gather(Years, Val, 3:4) %>% 
      spread(IndicatorName, Val)
#   Country Years Air Elec Mobile
#1  France  1960   2    9      2
#2  France  1965   3   10      4
#3 Germany  1960  50   43     45
#4 Germany  1965  43   23     66
#5     USA  1960  87   19      1
#6     USA  1965   2   81     77

或使用recast中的library(reshape2)。该函数是melt/dcast的包装器,其中melt与来自gather的{​​{1}}做同样的事情,即转换'宽&#39}。长期'格式,并tidyr转换“长”'回到广泛的' (来自dcast的{​​{1}})。在spread公式中,我们可以通过指示tidyr来使用完整的公式,或者我们可以使用dcast来指定Country + variable ~ IndicatorName的lh上的所有剩余变量。

...

只是为了更好地理解这一点,

~

另请注意,我们可以在 library(reshape2) recast(df1, measure.var=c('1960', '1965'), ...~IndicatorName, value.var='value') # Country variable Air Elec Mobile #1 France 1960 2 9 2 #2 France 1965 3 10 4 #3 Germany 1960 50 43 45 #4 Germany 1965 43 23 66 #5 USA 1960 87 19 1 #6 USA 1965 2 81 77 步骤

中更改变量名称
 melt(df1, measure.vars=c('1960', '1965')) %>% 
            dcast(., Country+variable~IndicatorName, value.var='value')

melt来自 melt(df1, measure.vars=c('1960', '1965'), variable.name='Years') %>% dcast(., Country+Years ~IndicatorName, value.var='value') 。 (这不是必需的。我们可以分两步完成这个。)

数据

%>%