gpt4 book ai didi

r - 使用存储在另一个数据表中的值对数据表中的值进行规范化

转载 作者:行者123 更新时间:2023-12-01 14:41:54 24 4
gpt4 key购买 nike

我正在尝试使用存储在另一个数据表 ( dt ) 中的基线值来规范化数据表 ( dt.base ) 中的值。接下来,您将获得这些表的示例内容以及生成该示例的代码:

> dt
Bench Config Part Power
1: A 10 P 171
2: A 10 Q 125
3: A 100 P 139
4: A 100 Q 109
5: B 10 P 196
6: B 10 Q 101
7: B 100 P 157
8: B 100 Q 176
> dt.base
Bench Config Part Power
1: A Base P 187
2: A Base Q 104
3: B Base P 166
4: B Base Q 188

示例生成代码:
set.seed(13)

dt <- data.table(
Bench = c(rep('A', 4), rep('B', 4)),
Config = rep(c(10, 10, 100, 100), 2),
Part = rep(c('P', 'Q'), 4),
Power = round(runif(8, 100, 200)))

dt.base <- data.table(
Bench = c(rep('A', 2), rep('B', 2)),
Config = c('Base', 'Base', 'Base', 'Base'),
Part = rep(c('P', 'Q'), 2),
Power = round(runif(4, 100, 200)))

这个想法是将 dt 中的所有值相除。通过它们在 dt.base 中的相应值.因此,该表将变为:
   Bench Config Part Power
1: A 10 P 171 / 187
2: A 10 Q 125 / 104
3: A 100 P 139 / 187
4: A 100 Q 109 / 104
5: B 10 P 196 / 166
6: B 10 Q 101 / 188
7: B 100 P 157 / 166
8: B 100 Q 176 / 188

我认为这个解决方案很简单,但我遇到了一些问题。这是我目前的尝试:
normalize.power <- function(pwr, base.pwr) {
pwr / base.pwr
}

dt.norm <- dt[,
Power <- normalize.power(
.SD, dt.base[Bench == Bench & Config == 'Base' & Part == Part,
'Power', with = F]
), by = list(Bench, Config, Part)]

问题是 normalize.pwr没有在其第二个参数 ( base.pwr ) 中接收单个值,而是一个包含 dt.base 中所有功率值的向量.但是,当我直接从命令行执行时
dt.base[Bench == 'A' & Config == 'Base' & Part == 'P', 'Power', with = F]

然后我获得了一个单一的功率值,正如预期的那样。

我将不胜感激能解决我的问题或引导我找到解决方案的任何帮助。

最佳答案

你可以试试这样的

setkey(dt, Bench, Part)
setkey(dt.base, Bench, Part)

dt[dt.base, Power := Power / i.Power]
dt
## Bench Config Part Power
## 1: A 10 P 0.91444
## 2: A 100 P 0.74332
## 3: A 10 Q 1.20192
## 4: A 100 Q 1.04808
## 5: B 10 P 1.18072
## 6: B 100 P 0.94578
## 7: B 10 Q 0.53723
## 8: B 100 Q 0.93617

感谢@Arun 的有用 i.Power句法

关于r - 使用存储在另一个数据表中的值对数据表中的值进行规范化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21343191/

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