R数据框按列名连接
R dataframe join by column name
当我尝试连接 2 个数据框时,我遇到了一个相当独特的问题(我相信),其中连接条件位于列名称(而不是值)上。让我用数据举例说明:
这是我的预测数据框的头部(多类预测):
> head(mnm.predict.test.probs)
1 2 3
9 1.013755e-04 3.713862e-02 0.96276001
10 1.904435e-11 3.153587e-02 0.96846413
12 6.445101e-23 1.119782e-11 1.00000000
13 1.238355e-04 2.882145e-02 0.97105472
22 9.027254e-01 7.259787e-07 0.09727389
26 1.365667e-01 4.034372e-01 0.45999610
这里是响应数据帧的头部:
> head(testing.logist$cut.rank)
[1] 3 3 3 3 1 3
这两个集合之间的连接应该通过第二个数据帧中的相应值查找第一个数据帧中的概率。例如:
返回的 dataframe/list 应如下所示:
0.96276001
0.96846413
1.00000000
0.97105472
9.027254e-01
0.45999610
知道如何有效地做到这一点吗?
[
子集运算符还接受一个矩阵作为参数,其中每一行代表您要获取的元素的行索引和列索引。试试这个:
mnm.predict.test.probs[cbind(1:nrow(mnm.predict.test.probs),testing.logist$cut.rank)]
#[1] 0.9627600 0.9684641 1.0000000 0.9710547 0.9027254 0.4599961
作为内部运算符,这比任何 for
循环或基于 *apply
的解决方案都要快。
当我尝试连接 2 个数据框时,我遇到了一个相当独特的问题(我相信),其中连接条件位于列名称(而不是值)上。让我用数据举例说明: 这是我的预测数据框的头部(多类预测):
> head(mnm.predict.test.probs)
1 2 3
9 1.013755e-04 3.713862e-02 0.96276001
10 1.904435e-11 3.153587e-02 0.96846413
12 6.445101e-23 1.119782e-11 1.00000000
13 1.238355e-04 2.882145e-02 0.97105472
22 9.027254e-01 7.259787e-07 0.09727389
26 1.365667e-01 4.034372e-01 0.45999610
这里是响应数据帧的头部:
> head(testing.logist$cut.rank)
[1] 3 3 3 3 1 3
这两个集合之间的连接应该通过第二个数据帧中的相应值查找第一个数据帧中的概率。例如: 返回的 dataframe/list 应如下所示:
0.96276001
0.96846413
1.00000000
0.97105472
9.027254e-01
0.45999610
知道如何有效地做到这一点吗?
[
子集运算符还接受一个矩阵作为参数,其中每一行代表您要获取的元素的行索引和列索引。试试这个:
mnm.predict.test.probs[cbind(1:nrow(mnm.predict.test.probs),testing.logist$cut.rank)]
#[1] 0.9627600 0.9684641 1.0000000 0.9710547 0.9027254 0.4599961
作为内部运算符,这比任何 for
循环或基于 *apply
的解决方案都要快。