r - 将数据框扩展为行对组合

标签 r dataframe

我有一个数据框,其中包含一个标识符/键列,后跟几行值列。
我想通过将键列中唯一的条目对作为新行来扩展数据列,并使用对应行中的条目的二进制运算来转换值列。

例如。

> 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 的东西并手动单独构建每一列,然后将它们全部粘贴到一个新的数据框中,但这似乎会很笨拙而且很慢,应该有一个更自动的功能来做到这一点,比如 reshape 、合并或重铸......但我似乎无法弄清楚如何让它发挥作用。

最佳答案

outer非常适合此类问题:

de_wf <- with(Test_data, setNames(dE_water_free, SYS))
outer(de_wf, de_wf, `-`)

产生:
           4NTJ_D294N 4NTJ_wild 4PXZ_D294N 4PXZ_wild 4PY0_D294N 4PY0_wild
4NTJ_D294N      0.000   114.489     -3.112     3.448     20.498    22.538
4NTJ_wild    -114.489     0.000   -117.601  -111.041    -93.991   -91.951
4PXZ_D294N      3.112   117.601      0.000     6.560     23.610    25.650
4PXZ_wild      -3.448   111.041     -6.560     0.000     17.050    19.090
4PY0_D294N    -20.498    93.991    -23.610   -17.050      0.000     2.040
4PY0_wild     -22.538    91.951    -25.650   -19.090     -2.040     0.000

关于r - 将数据框扩展为行对组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30311908/

相关文章:

python - 如何根据错误值找到两个 pandas 系列之间的交集

r - 从全局环境中排除特定对象类型

python - Pandas - 分组、排序并保留第一行

r - R中数据框中条件的单独列

r - 如何将对数图的值从指数表示法更改为点阵包中的数值?

R-将数据从分数转换为小数

css - 使用 rvest 在 Twitter 中抓取用户视频

R 中 xts 的回归

Python Pandas : How to groupby aggregate using a function that returns pd. 系列

r - 在R中,如何真正快速地遍历数据帧的行?