У меня есть кадр данных, который содержит столбец идентификатор/ключ, за которым следуют несколько столбцов столбцов значений. Я хочу расширить столбец данных, взяв уникальные пары записей в ключевом столбце в качестве новых строк и преобразуя столбцы значений, используя двоичные операции над записями из соответствующих строк.
например.
> 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
Некоторые из столбцов могут содержать или не содержать отсутствующие значения.
то, что я хотел бы, это взять каждую пару записей SYS, например. SYS1 SYS2 и вычислить двоичную операцию в соответствующих строках значений Например. SYS1 SYS2 dE_water_free (SYS == SYS1) -dE_water_free (SYS == SYS2)... и т.д.
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.
Я могу использовать функцию combn()
, чтобы получить массив пар из столбца SYSTEM, чтобы сформировать записи в SYS1 и SYS2, но я не уверен, как использовать его для создания нового фрейма данных...
Я знаю, что одним из вариантов было бы использовать что-то вроде mapply и строить каждый столбец индивидуально вручную, а затем вставлять их все в новый фрейм данных, но похоже, что он будет klunky и медленным, и должна быть более автоматическая функция для этого, например, изменить форму, слить или переделать... но я не могу понять, как это работает.