我有一个 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/