我目前正在适应新工作,我与同事共享的大部分工作都是通过MS Excel。我经常使用数据透视表,因此需要“堆叠的”数据,恰恰是我依赖R melt()的reshape(reshape2)包中函数的输出。
谁能让我开始使用VBA宏来完成此任务,或者已经存在?
宏的轮廓为:
在Excel工作簿中选择一个单元格区域。
启动“融化”宏。
宏将创建一个提示,“输入ID列数”,在此输入标识信息前几列。(例如下面的示例R代码为4)。
在excel文件中创建一个名为“ melt”的新工作表,该工作表将堆叠数据,并创建一个名为“ variable”的新列,该列等于原始选择的数据列标题。
换句话说,输出看起来与简单地在R中执行这两行的输出完全相同:
require(reshape)
melt(your.unstacked.dataframe, id.vars = 1:4)
这是一个例子:
# unstacked data
> df1
Year Month Country Sport No_wins No_losses High_score Total_games
2 2010 5 USA Soccer 4 3 5 9
3 2010 6 USA Soccer 5 3 4 8
4 2010 5 CAN Soccer 2 9 7 11
5 2010 6 CAN Soccer 4 8 4 13
6 2009 5 USA Soccer 8 1 4 9
7 2009 6 USA Soccer 0 0 3 2
8 2009 5 CAN Soccer 2 0 6 3
9 2009 6 CAN Soccer 3 0 8 3
# stacking the data
> require(reshape)
> melt(df1, id.vars=1:4)
Year Month Country Sport variable value
1 2010 5 USA Soccer No_wins 4
2 2010 6 USA Soccer No_wins 5
3 2010 5 CAN Soccer No_wins 2
4 2010 6 CAN Soccer No_wins 4
5 2009 5 USA Soccer No_wins 8
6 2009 6 USA Soccer No_wins 0
7 2009 5 CAN Soccer No_wins 2
8 2009 6 CAN Soccer No_wins 3
9 2010 5 USA Soccer No_losses 3
10 2010 6 USA Soccer No_losses 3
11 2010 5 CAN Soccer No_losses 9
12 2010 6 CAN Soccer No_losses 8
13 2009 5 USA Soccer No_losses 1
14 2009 6 USA Soccer No_losses 0
15 2009 5 CAN Soccer No_losses 0
16 2009 6 CAN Soccer No_losses 0
17 2010 5 USA Soccer High_score 5
18 2010 6 USA Soccer High_score 4
19 2010 5 CAN Soccer High_score 7
三国纷争
喵喵时光机