r - 获取元素随机从另一个表B取数据表

标签 r data.table

我有一个 data.table 类型的表 A,其中包含一组元素,我想向该表添加一个新的 mass 列,从另一个表 B 中随机检索。 我想用 data.table 包来做这个,但我不知道如何优化它。

表A

element
----------
silver
chlorine
silver
chlorine
chlorine
chlorine
silver

表B

mass    element
------ 
0.3     silver
0.5     silver
1.6     silver
1.2     chlorine
5.3     chlorine
0.1     chlorine

建表代码:

tableA <- data.table(
  element = c("silver","chlorine","silver", "chlorine","chlorine","chlorine","silver")
)

tableB <- data.table(

  mass = c(0.3,0.5,1.6,1.2,5.3,0.1),
  element = c("silver","silver","silver", "chlorine","chlorine","chlorine")
)

我想在 data.table 包中使用的数据量非常重要

预期结果:

    element     mass
-----------------------
    silver      1.6
    chlorine    5.3
    silver      0.3
    chlorine    1.2
    chlorine    1.2
    chlorine    0.1
    silver      1.6

此代码返回一个无法修复的错误,但您认为该方法是否良好且经过优化?

tableA[, mass := tableB[sample(mass), on = .(element)]$mass]

最佳答案

这是一种方法,

set.seed(42)
tableA[tableB[, list(mass = list(mass)), by = element], mass := sapply(i.mass, sample, size = 1), on = .(element)]
tableA
#     element  mass
#      <char> <num>
# 1:   silver   0.3
# 2: chlorine   1.2
# 3:   silver   0.3
# 4: chlorine   5.3
# 5: chlorine   5.3
# 6: chlorine   5.3
# 7:   silver   0.3

关于r - 获取元素随机从另一个表B取数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72354735/

相关文章:

r - 带有 d3treeR 的交互式树形图未在 Shiny 中呈现

r - 如何从 R 中的分组数据框中标准化子组

r - 匹配同一数据框上另一列范围内的列中的值并返回相应的行

r - 更新 data.table 是否有效取决于给定的列名

r - 如何在 sum() 语句中按位置引用 data.table 的列

r - 如何将多个 fluidRows() 放在一个 Shiny 输出中?

r - 调整网格中轴刻度之间的间距

r - 根据 ID 将值复制到其他 NA 单元

r - R 中特定值的计数器顺序

r - 如何计算与data.table中加权平均值的偏差?