提前为这篇长文道歉;我对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),我不确定这是不是解决问题的最接近R的方法。
以下是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))
https://stackoverflow.com/questions/51583716
复制相似问题