在R中进行多次匹配后如何从2个数据帧中乘列值

秋叶62

我有2个数据框。我想单元格的值相匹配det_id来自df_1Id_1Id_2df_2如果我得到任何的比赛,然后我要加倍的multiplierdf_1simdf_2数据框结构如下

df_1

  id                                  det_id multiplier
1  1     FID00119 _ FSID012160 _ Riboflavine       0.20
2  2     FID00099 _ FSID012160 _ Riboflavine       0.30
3  3          FID00120 _ FSID009721 _ Lignin       0.50
4  4 FID00120 _ FSID012362 _ beta-Sitosterol       0.20
5  5       FID00038 _ FSID013505 _ Taraxerol       0.70
6  6 FID00087 _ FSID012362 _ beta-Sitosterol       0.90
7  7     FID00094 _ FSID013269 _ Cholesterol       0.05

df_2

                                        Id_1                                    Id_2  sim
1                                    ID00309                                 ID00314 0.55
2                                    ID00309                                 ID00315 0.66
3                                    ID00309     FID00119 _ FSID012160 _ Riboflavine 0.97
4                                    ID00309     FID00099 _ FSID012160 _ Riboflavine 0.66
5                                    ID00310          FID00120 _ FSID009721 _ Lignin 0.55
6                                    ID00311 FID00120 _ FSID012362 _ beta-Sitosterol 0.34
7                                    ID00312       FID00038 _ FSID013505 _ Taraxerol 0.44
8                                    ID00313 FID00087 _ FSID012362 _ beta-Sitosterol 0.55
9                                    ID00313     FID00094 _ FSID013269 _ Cholesterol 0.23
10         FID00038 _ FSID013505 _ Taraxerol                                 ID00910 0.00
11 FID00120 _ FSID001304 _ alpha1-Sitosterol        FID00017 _ FSID004090 _ Atropine 1.00
12   FID00087 _ FSID012362 _ beta-Sitosterol       FID00038 _ FSID013505 _ Taraxerol 0.78

我写的代码只能Id_1 or Id_2单独匹配,不能同时匹配

df_2$new_ssp <- df_2$multiplier[match(df_1$Id_1, df_1$det_id)] * df_2[-c(1, 2)] 

或者

df_2$new_ssp <- df_2$multiplier[match(df_2$Id_2, df_1$det_id)] * df_2[-c(1, 2)]

那么,我该如何解决这些问题呢?

  1. 我想Id_1 or Id_2在同一代码中将两者匹配例如,如果我使用第二个代码,则获取NA10, 11行数为df_2但是,我也想比赛ID_1
  2. 如果没有像这样的1 and 2数字行匹配df_2那么我想将sim值放在新列中new_ssp
  3. 如果有喜欢的多个匹配12的数列df_2,然后我想借此maximum multiplierdf_1(如0.90),以乘用simdf_2

任何建议都是可取的。

可重现的数据集

df_1

structure(list(id = 1:7, det_id = structure(c(5L, 4L, 6L, 7L, 
1L, 2L, 3L), .Label = c("FID00038 _ FSID013505 _ Taraxerol", 
"FID00087 _ FSID012362 _ beta-Sitosterol", "FID00094 _ FSID013269 _ Cholesterol", 
"FID00099 _ FSID012160 _ Riboflavine", "FID00119 _ FSID012160 _ Riboflavine", 
"FID00120 _ FSID009721 _ Lignin", "FID00120 _ FSID012362 _ beta-Sitosterol"
), class = "factor"), multiplyer = c(0.2, 0.3, 0.5, 0.2, 0.7, 
0.9, 0.05)), class = "data.frame", row.names = c(NA, -7L))

df_2

structure(list(Id_1 = structure(c(4L, 4L, 4L, 4L, 5L, 6L, 7L, 
8L, 8L, 1L, 3L, 2L), .Label = c("FID00038 _ FSID013505 _ Taraxerol", 
"FID00087 _ FSID012362 _ beta-Sitosterol", "FID00120 _ FSID001304 _ alpha1-Sitosterol", 
"ID00309", "ID00310", "ID00311", "ID00312", "ID00313"), class = "factor"), 
    Id_2 = structure(c(9L, 10L, 6L, 5L, 7L, 8L, 2L, 3L, 4L, 11L, 
    1L, 2L), .Label = c("FID00017 _ FSID004090 _ Atropine", "FID00038 _ FSID013505 _ Taraxerol", 
    "FID00087 _ FSID012362 _ beta-Sitosterol", "FID00094 _ FSID013269 _ Cholesterol", 
    "FID00099 _ FSID012160 _ Riboflavine", "FID00119 _ FSID012160 _ Riboflavine", 
    "FID00120 _ FSID009721 _ Lignin", "FID00120 _ FSID012362 _ beta-Sitosterol", 
    "ID00314", "ID00315", "ID00910"), class = "factor"), sim = c(0.55, 
    0.66, 0.97, 0.66, 0.55, 0.34, 0.44, 0.55, 0.23, 0, 1, 0.78
    ), new_ssp = structure(list(sim = c(NA, NA, 0.194, 0.198, 
    0.275, 0.068, 0.308, 0.495, 0.0115, NA, NA, 0.546)), class = "data.frame", row.names = c(NA, 
    -12L))), row.names = c(NA, -12L), class = "data.frame")
后期邮件

我认为您建议的代码中有一些小的错别字(例如,乘数与乘数),但我暂时忽略了这一点。尝试使用类似的方法,lapply用于遍历要乘除的每个变量。获得一组结果后,然后使用parallel imum max

o <- lapply(df_2[c("Id_1","Id_2")], function(x) {
  df_1$multiplyer[match(x, df_1$det_id)] * df_2$sim 
})
o <- do.call(pmax, c(o, na.rm=TRUE))
o[is.na(o)] <- df_2$sim[is.na(o)]
o
#[1] 0.5500 0.6600 0.1940 0.1980 0.2750 0.0680 0.3080 0.4950 0.0115 0.0000 1.0000 0.7020

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在2个数据帧之间串联匹配的列值

来自分类Dev

R-将一个数据帧中的值与另一个数据帧中的多个值进行匹配

来自分类Dev

如何为第一个数据帧中匹配的特定列值的所有值获取第二个数据帧的数据?

来自分类Dev

创建仅包含R中2个数据帧中匹配数据的数据帧

来自分类Dev

当两列中的值与第二个数据帧中的值匹配时,对数据帧进行子设置

来自分类Dev

在R中,如何根据另一个数据帧中的范围对一个数据帧中的值进行分类?

来自分类Dev

合并2个数据帧,R列中的值相同

来自分类Dev

使用R中的匹配将列的子集乘以第二个数据帧中的值

来自分类Dev

如何计算R中2个数据帧之间具有相同值的行数

来自分类常见问题

在R中,如何将一个数据框中选定行中的值与另一数据框中选定列的值进行匹配?

来自分类Dev

在R中,如何将一个数据框中选定行中的值与另一数据框中选定列的值进行匹配?

来自分类Dev

如何将一个数据帧中某些列的值与另一数据帧中同一列集的值进行比较?

来自分类Dev

R-根据第二个数据帧中的最接近匹配项分配列值

来自分类Dev

当第二个数据帧中存在匹配值时,替换数据帧列的值

来自分类Dev

向量化R中2个数据框列之间的匹配值

来自分类Dev

使用 R 中另一个数据帧的其他匹配 ID 替换数据帧中的值

来自分类Dev

在R中的数据帧的列中进行迭代(循环)

来自分类Dev

筛选R中多列且至少匹配6个数据帧

来自分类Dev

如何合并2个熊猫数据帧,并从2个匹配的行中更新具有最新值的列?

来自分类Dev

如何在两个数据帧中查找值,以及如何在一个数据帧中的匹配行上添加新值

来自分类Dev

给定2个数据帧,在第二个数据帧中搜索匹配值和返回值

来自分类Dev

根据R中的两个匹配条件,将值从一个数据帧添加到另一个数据帧

来自分类Dev

如何绘制一个数据帧,其中需要将顶部的4列分组为R中的2个?

来自分类Dev

如何将一个数据帧的值与另一个数据帧中的值进行比较?

来自分类Dev

当两个数据帧的列和索引完全相同时,如何通过匹配另一个数据帧的条件来对一个数据帧的数据进行分组?

来自分类Dev

在R中的2个数据帧之间通过多个条件进行索引

来自分类Dev

如何基于基础R中的另一个数据帧对数据帧进行子集

来自分类Dev

R替换另一个数据帧中的多列值

来自分类Dev

R将列乘以第二个数据帧中的值

Related 相关文章

  1. 1

    在2个数据帧之间串联匹配的列值

  2. 2

    R-将一个数据帧中的值与另一个数据帧中的多个值进行匹配

  3. 3

    如何为第一个数据帧中匹配的特定列值的所有值获取第二个数据帧的数据?

  4. 4

    创建仅包含R中2个数据帧中匹配数据的数据帧

  5. 5

    当两列中的值与第二个数据帧中的值匹配时,对数据帧进行子设置

  6. 6

    在R中,如何根据另一个数据帧中的范围对一个数据帧中的值进行分类?

  7. 7

    合并2个数据帧,R列中的值相同

  8. 8

    使用R中的匹配将列的子集乘以第二个数据帧中的值

  9. 9

    如何计算R中2个数据帧之间具有相同值的行数

  10. 10

    在R中,如何将一个数据框中选定行中的值与另一数据框中选定列的值进行匹配?

  11. 11

    在R中,如何将一个数据框中选定行中的值与另一数据框中选定列的值进行匹配?

  12. 12

    如何将一个数据帧中某些列的值与另一数据帧中同一列集的值进行比较?

  13. 13

    R-根据第二个数据帧中的最接近匹配项分配列值

  14. 14

    当第二个数据帧中存在匹配值时,替换数据帧列的值

  15. 15

    向量化R中2个数据框列之间的匹配值

  16. 16

    使用 R 中另一个数据帧的其他匹配 ID 替换数据帧中的值

  17. 17

    在R中的数据帧的列中进行迭代(循环)

  18. 18

    筛选R中多列且至少匹配6个数据帧

  19. 19

    如何合并2个熊猫数据帧,并从2个匹配的行中更新具有最新值的列?

  20. 20

    如何在两个数据帧中查找值,以及如何在一个数据帧中的匹配行上添加新值

  21. 21

    给定2个数据帧,在第二个数据帧中搜索匹配值和返回值

  22. 22

    根据R中的两个匹配条件,将值从一个数据帧添加到另一个数据帧

  23. 23

    如何绘制一个数据帧,其中需要将顶部的4列分组为R中的2个?

  24. 24

    如何将一个数据帧的值与另一个数据帧中的值进行比较?

  25. 25

    当两个数据帧的列和索引完全相同时,如何通过匹配另一个数据帧的条件来对一个数据帧的数据进行分组?

  26. 26

    在R中的2个数据帧之间通过多个条件进行索引

  27. 27

    如何基于基础R中的另一个数据帧对数据帧进行子集

  28. 28

    R替换另一个数据帧中的多列值

  29. 29

    R将列乘以第二个数据帧中的值

热门标签

归档