ho un frame di dati che contiene un/colonna identificatore seguito da diverse file di colonne di valore. voglio espandere la colonna dati prendendo coppie uniche di voci nella colonna tonalità delle nuove righe e trasformare le colonne valore usando operazioni binarie sulle voci dalle righe corrispondenti.Expand frame di dati in combinazioni di coppie di righe
E.g.
> Test_data
SYS dE_water_free dE_water_periodic dE_membrane_periodic RTlogKi
1 4NTJ_D294N -56.542 -56.642 NA -0.9629731
2 4NTJ_wild -171.031 -162.030 NA -0.8877264
3 4PXZ_D294N -53.430 -50.810 NA -1.1301124
4 4PXZ_wild -59.990 -57.320 NA -1.2318835
5 4PY0_D294N -77.040 -72.880 NA -1.1351579
6 4PY0_wild -79.080 -74.950 NA -1.2297302
Alcune colonne possono o non possono contenere valori mancanti.
quello che vorrei sarebbe di prendere ogni coppia di voci, ad esempio SYS SYS1 SYS2 e calcola un'operazione binaria sulle righe del valore corrispondente E.g. SYS1 SYS2 dE_water_free (SYS == SYS1) -dE_water_free (SYS == SYS2) ... ecc
SYS1 SYS2 dE_water_free dE_water_periodic ...etc.
1 4NTJ_D294N 4NTJ_wild 114.489 105.610
2 4NTJ_D294N 4PXZ_D294N -3.112 5.832
... etc.
posso utilizzare la funzione combn()
per ottenere un array di coppie dalla colonna SYSTEM per formare le voci SYS1 e SYS2, ma non sono sicuro di come usarlo per costruire il nuovo data frame ...
So che un'opzione potrebbe essere quella di utilizzare qualcosa come mapply e creare ogni colonna singolarmente a mano, quindi incollarli tutti in una nuova cornice di dati, ma che sembra sarà klunky e lento e ci dovrebbe essere una funzione più automatico per fare questo, come rimodellare, merge, o rifusione ... ma io non riesco a capire come fare quel lavoro .
Liberamente correlato: http://stackoverflow.com/q/30237924/1191259 – Frank
A proposito, se si desidera che tutte le coppie * *, come 'A, B' e' B, A' , dovresti 'expand.grid' (o' CJ' nel pacchetto 'data.table') piuttosto che' combn', penso. – Frank