Tengo dos dataframes. Por ejemplo

require('xlsx')
csvData <- read.csv("myData.csv")
xlsData <- read.xlsx("myData.xlsx")

csvData se parece a esto:

Period  CPI     VIX
1       0.029   31.740
2       0.039   32.840
3       0.028   34.720
4       0.011   43.740
5       -0.003  35.310
6       0.013   26.090
7       0.032   28.420
8       0.022   45.080

xlsData se parece a esto:

Period  CPI     DJIA
1       0.029   12176
2       0.039   10646
3       0.028   11407
4       0.011   9563
5       -0.003  10708
6       0.013   10776
7       0.032   9384
8       0.022   7774

Cuando me combinar estos datos, los datos del IPC se duplica, y un sufijo que se pone en el encabezado, lo que es problemático (tengo muchas más columnas en mi real del df).

mergedData <- merge(xlsData, csvData, by = "Period")

mergedData:

Period  CPI.x   VIX     CPI.y   DJIA
1       0.029   31.740  0.029   12176
2       0.039   32.840  0.039   10646
3       0.028   34.720  0.028   11407
4       0.011   43.740  0.011   9563
5       -0.003  35.310  -0.003  10708
6       0.013   26.090  0.013   10776
7       0.032   28.420  0.032   9384
8       0.022   45.080  0.022   7774

Quiero combinar los marcos de datos sin necesidad de duplicar las columnas con el mismo nombre. Por ejemplo, yo quiero este tipo de salida:

Period  CPI     VIX     DJIA
1       0.029   31.740  12176
2       0.039   32.840  10646
3       0.028   34.720  11407
4       0.011   43.740  9563
5       -0.003  35.310  10708
6       0.013   26.090  10776
7       0.032   28.420  9384
8       0.022   45.080  7774

No quiero tener que recurrir a otros ‘por’ argumentos, o quitar columnas de uno de los del df, debido a que hay demasiadas columnas que se duplican en df. Estoy buscando una manera dinámica para colocar los duplicados de las columnas durante el proceso de mezcla.

Gracias!

OriginalEl autor Clark Henry | 2014-06-27

1 Comentario

  1. 7

    Puede omitir el by argumento si el común de las columnas se denominan de la misma.

    De ?merge:

    Por defecto las tramas de datos que se combinarán en las columnas con los nombres de ambos tienen, pero aparte de las especificaciones de las columnas puede ser dada por by.x y by.y.

    Mantener eso en mente, el siguiente debe funcionar (como hizo en su muestra de datos):

    merge(csvData, xlsData)
    #   Period    CPI   VIX  DJIA
    # 1      1  0.029 31.74 12176
    # 2      2  0.039 32.84 10646
    # 3      3  0.028 34.72 11407
    # 4      4  0.011 43.74  9563
    # 5      5 -0.003 35.31 10708
    # 6      6  0.013 26.09 10776
    # 7      7  0.032 28.42  9384
    # 8      8  0.022 45.08  7774
    Gracias. Yo no me di cuenta «por» es opcional. ¿Qué pasa si mi df son de diferente longitud? Por ejemplo, supongamos que csvData tenía solo 7 filas. Quiero mantener todos los datos de xlsData. Luego cbind la csvData (NULL es bueno para la fila 8 correspondiente a csvData).
    uso all = TRUE tal vez? Ejemplo: merge(csvdata[1:7, ], xlsdata, all = TRUE)
    Esto no funciona para mí, usar SparkR.

    OriginalEl autor A5C1D2H2I1M1N2O1R2T1

Dejar respuesta

Please enter your comment!
Please enter your name here