gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 13:47:47 24 4
gpt4 key购买 nike

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

例如。

> 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com