【发布时间】:2019-01-06 02:22:39
【问题描述】:
提前为长篇致歉;我是 R 的这一部分的新手,所以我不知道如何总结这个问题。
我有一个“基线结果”的数据框,看起来像这样
Circuit Voltage Power
A 1 1
B 1 3
C 1 5
还有一个看起来像这样的缩放模型
Voltage Scaled_Power
1.0 1.00
0.9 0.75
0.8 0.50
这个缩放模型来自一个表,而不是来自任何函数,例如lm。该模型本质上说:“如果新电压 == 0.9,则将基线功率缩放 0.75”。缩放模型独立于“电路”,但需要特定“电路”的基线功率来计算新的功率。我想要达到的最终结果是这样的:
Circuit Voltage Power
A 1.0 1.00
B 1.0 3.00
C 1.0 5.00
A 0.9 0.75
B 0.9 2.25
C 0.9 3.75
A 0.8 0.50
B 0.8 1.50
C 0.8 2.50
也就是说,一个新的数据帧,其中包含第一个数据帧中的“电路”和第二个数据帧中的“电压”的所有组合(我知道我可以使用 expand.grid 做到这一点),但有一个新列“电源”它应用了比例因子。
这听起来像模式普遍解决,所以我猜一个解决方案一定已经存在?
到目前为止,我已经尝试了以下方法
expand.grid(Circuit = df_base$Circuit,Voltage = scaling_model$Voltage) %>%
left_join(df_base) %>%
left_join(scaling_model)
Circuit Voltage Power Scaled_Power
A 1.0 1 1.00
B 1.0 3 1.00
C 1.0 5 1.00
A 0.9 NA 0.75
B 0.9 NA 0.75
C 0.9 NA 0.75
A 0.8 NA 0.50
B 0.8 NA 0.50
C 0.8 NA 0.50
但是我需要一些函数来从一行中选择一个特定值进行乘法运算(类似于 Excel 的 VLOOKUP),我不确定这是解决问题的最简单的方法。
这是 MWE 的代码
library(dplyr)
scaling_model <-
data.frame(
Voltage = c(1.0, 0.9, 0.8),
Scaled_Power = c(1.0, 0.75, 0.5))
df_base <- data.frame(
Circuit = factor(c("A", "B", "C")),
Voltage = c(1.0, 1.0, 1.0),
Power = c(1.0, 3.0, 5.0))
df_result <-
data.frame(
Circuit = factor(c("A", "B", "C", "A", "B", "C", "A", "B", "C")),
Voltage = c(1.0, 1.0, 1.0, 0.9, 0.9, 0.9, 0.8, 0.8, 0.8),
Power = c(1.0, 3.0, 5.0,
1.0 * 0.75, 3.0 * 0.75, 5.0 * 0.75,
1.0 * 0.5, 3.0 * 0.5, 5.0 * 0.5))
【问题讨论】:
-
您的预期输出中可能有错字吗?
power的前三个条目应该是1 3 5,而不是1 1 1。 -
我最诚挚的歉意!刚刚修好了。