Actualmente me estoy adaptando a un nuevo trabajo donde la mayor parte del trabajo que comparto con mis colegas es a través de MS Excel. Estoy usando tablas dinámicas con frecuencia, y por lo tanto necesito datos "apilados", precisamente el resultado de la función melt()
en el paquete reshape
(reshape2) en R que he llegado a confiar para esto.derretir/remodelar en excel usando VBA?
¿Alguien podría iniciarme en una macro de VBA para lograr esto, o ya existe?
El contorno de la macro sería:
- seleccionar un rango de celdas en un libro de Excel.
- Comience macro "derretimiento".
- Macro crearía un aviso, "Ingrese el número de columnas de id.", Donde ingresaría el número de columnas precedentes de información de identificación. (para el ejemplo del código R a continuación, es 4).
- Cree una nueva hoja de trabajo en el archivo de Excel titulada "fundir" que apilaría los datos, y crearía una nueva columna titulada "variable" igual a los encabezados de columna de datos de la selección original.
En otras palabras, la salida sería exactamente la misma que la salida de limitarse a la ejecución de estas dos líneas en I:
require(reshape)
melt(your.unstacked.dataframe, id.vars = 1:4)
He aquí un ejemplo:
# 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
20 2010 6 CAN Soccer High_score 4
21 2009 5 USA Soccer High_score 4
22 2009 6 USA Soccer High_score 3
23 2009 5 CAN Soccer High_score 6
24 2009 6 CAN Soccer High_score 8
25 2010 5 USA Soccer Total_games 9
26 2010 6 USA Soccer Total_games 8
27 2010 5 CAN Soccer Total_games 11
28 2010 6 CAN Soccer Total_games 13
29 2009 5 USA Soccer Total_games 9
30 2009 6 USA Soccer Total_games 2
31 2009 5 CAN Soccer Total_games 3
32 2009 6 CAN Soccer Total_games 3
Mi método preferido para lograr esto es: 1. guardar el archivo de Excel como csv; 2. lea en R y proceda de manera normal y sana; 3. escribir de nuevo csv derretido/reformado; 4. abrir en Excel como si nada hubiera pasado. – Justin
Hay un complemento ('RExcel') que le permite llamar a R desde Excel. –
Sí, eso es exactamente lo que he estado haciendo (copiar celdas al portapapeles, procesar en R, salir como .csv). Sin embargo, quiero hacer una solución que pueda compartir con mis compañeros de trabajo, así que debe estar en VBA. –