Tôi có một khung dữ liệu chứa một mã định danh/khóa chính được theo sau bởi một vài hàng của các cột giá trị. Tôi muốn mở rộng cột dữ liệu bằng cách lấy các cặp mục duy nhất trong cột khóa làm các hàng mới và chuyển đổi các cột giá trị sử dụng phép toán nhị phân trên các mục từ các hàng tương ứng.Mở rộng khung dữ liệu thành các tổ hợp của các cặp hàng
Ví dụ:
> 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
Một số cột có thể hoặc không thể chứa (các) giá trị còn thiếu.
điều tôi muốn là lấy từng cặp mục nhập SYS, ví dụ: SYS1 SYS2 và tính toán một phép toán nhị phân trên các hàng có giá trị tương ứng Ví dụ: SYS1 SYS2 dE_water_free (SYS == SYS1) -dE_water_free (SYS == SYS2) ... vv
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.
tôi có thể sử dụng chức năng combn()
để có được một mảng của các cặp từ cột HỆ THỐNG để tạo thành các mục trong SYS1 và SYS2, nhưng tôi không biết cách sử dụng nó để xây dựng khung dữ liệu mới ...
Tôi biết một tùy chọn sẽ sử dụng một cái gì đó như mapply và xây dựng từng cột một cách thủ công, sau đó dán tất cả vào một khung dữ liệu mới, nhưng điều đó có vẻ như nó sẽ là klunky và chậm và sẽ có một chức năng tự động hơn để thực hiện việc này, như định dạng lại, hợp nhất hoặc lặp lại ... nhưng tôi không thể tìm ra cách làm việc đó .
Lỏng lẻo liên quan: http://stackoverflow.com/q/30237924/1191259 – Frank
Bằng cách này, nếu bạn muốn * tất cả * cặp, như 'A, b' và 'B, A' , bạn sẽ muốn 'expand.grid' (hoặc' CJ' trong gói 'data.table') thay vì' combn', tôi nghĩ vậy. – Frank