我有一个名为APD的数据框,我想为“Fitted_voltage”列分配一个值,但仅适用于特定的子集(按serial_number分组)。我怎么做? 在以下示例中,我想为Fitted_Voltage分配150,但仅为Serial_number 913009814分配。
Serial_number Lot Wafer Amplification Voltage Fitted_Voltage
912009913 9 912 1878 375.3 NA
912009913 9 912 1892 376.8 NA
912009913 9 912 1900 377.9 NA
812009897 8 812 3931.1 370.5 NA
812009897 8 812 3934.8 371 NA
812009897 8 812 3939.9 372.3 NA
...
...
最后我想自动执行此操作。我适合一些数据点,并希望为每个serial_number分配拟合结果。 这个过程可能是:
通过函数function_to_observe进行拟合,并对序列号为912009913的特定值150进行逐点逆回归:
function_to_observe(150)
这会产生结果
[1] 360.6395
,它应存储在Fitted_Voltage列中的数据帧中,用于单个serial_number
然后将安装下一个serial_number 812009897,并为其一次又一次地存储该值..
我知道我可以将值添加到列中,但不限于子集:
APD["Fitted_Voltage"] <- Fitted_voltage<- function_to_observe(150)
更新:根据Eric Lecoutre的回答我现在有了:
ID<- 912009913
ID2<- 912009914
APD_result<- data.frame(Serial_Number=rep(c(ID, ID2),each=1), Fitted_Voltage=NA)
comp <- tapply(APD_result$Fitted_Voltage, APD_result$Serial_Number, function_to_observe = inverse((function(x=150) exp(exp(sum(x^0*VK[1],x^1*VK[2],x^2*VK[3],x^3*VK[4])))), 50, 375))
APD_result$Fitted_Voltage = comp[APD_result$Serial_Number]
这非常有效但我需要应用一些细微的变化。这对我来说不是那么轻微..
1。)必须自动添加Serial_numbers(以“ID,ID2”两个示例的形式给出)
2。)因为我删除了电压,所以我没有开始运行。很抱歉没有在我之前的问题中指明这一点。电压不感兴趣,我只想在结束帧中的Serial_number和Fitted_Voltage,它们彼此属于。
答案 0 :(得分:1)
对我来说function_to_observe
的作用不太清楚。我假设您“利用”给定Serial_Number
的电压值集。
我准备了一个小函数,它有一个额外的参数(值)。
以下是否回答了您的问题?
df <- data.frame(Serial_Number=rep(c("a","b"),each=3),Voltage=abs(100*rnorm(6)), FittedVoltage=NA)
function_to_observe <- function(vec,value=150) {mean(vec)+value}
comp <- tapply(df$Voltage, df$Serial_Number, function_to_observe, value=150)
df$FittedVoltage = comp[df$Serial_Number]
有
result
Serial_Number Voltage FittedVoltage
1 a 21.01196 205.4419
2 a 37.04815 205.4419
3 a 108.26565 205.4419
4 b 121.37657 264.3040
5 b 39.92053 264.3040
6 b 181.61485 264.3040
(是的,我知道这里的合适电压与电压完全无关......只是不明白你的150在这里做什么)