Mam ramkę danych, która zawiera kolumnę identyfikatora/klucza, po której następuje kilka wierszy kolumn wartości. Chcę rozwinąć kolumnę danych, biorąc unikatowe pary wpisów w kolumnie klucza jako nowe wiersze i przekształcić kolumny wartości za pomocą operacji binarnych we wpisach z odpowiednich wierszy.Rozwiń ramkę danych w kombinacje par wierszy.
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
Niektóre kolumny mogą zawierać lub mogą nie zawierać brakujących wartości.
Chciałbym wziąć każdą parę pozycji SYS, np. SYS1 SYS2 i obliczyć operację binarną na odpowiednich wierszach wartości E.g. Sys1 sys2 dE_water_free (SYS == sys1) -dE_water_free (SYS == sys2) ... itd
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.
mogę użyć funkcji combn()
aby uzyskać tablicę par z kolumny SYSTEM tworząc wpisy w sys1 i SYS2, ale nie wiem, jak go użyć do zbudowania nowej ramki danych ...
Wiem, że jedną z opcji byłoby użycie czegoś takiego jak mapply i samodzielne zbudowanie każdej kolumny ręcznie, a następnie wklejenie ich wszystkich do nowa ramka danych, ale wygląda na to, że będzie wolna i wolna, i powinna istnieć bardziej automatyczna funkcja, taka jak przekształcanie, scalanie lub przekształcanie ... ale nie mogę się domyślić, jak to działa .
Luźno powiązane: http://stackoverflow.com/q/30237924/1191259 – Frank
Przy okazji, jeśli chcesz * ALL * par, jak 'a, B' i' B, A' , będziesz potrzebować 'expand.grid' (lub' CJ' w pakiecie 'data.table') zamiast' combn', jak sądzę. – Frank