在 R 中创建一个使用引用其他列的方程式的新列

Creating a new column in R that uses an equation referencing other columns

您好,我正在尝试在名为“Erie”的数据集中创建一个名为“pCO2”的新列。我的数据集目前有 ph、alk 和 temp 值。有一个名为 AquaEnv 的软件包,如果您有 pH 值和碱度值,它可以让您预测 CO2 值。

这是在“pCO2 列”中找到我想要的值的方程式

ae<-aquaenv(S=0,t=0,p=0, SumCO2 = NULL, pH= 7.7,TA=90 )
ae$SumCO2

在我的 Erie 数据集中引用相应的 pH 值和碱度值时,有没有办法做到这一点?

这是我的想法,但它没有给出正确的值。

Erie$pCO2<-aquaenv(S=0,t=0,p=0, SumCO2 = NULL, pH=Erie$pH,TA= 
  Erie$ALKALINITY..mg.L.)

谢谢!

这是一个令人惊讶的常见问题,没有真正好的答案。

让它工作的最快方法是:

df$SumCO2 <- sapply(
  split(Erie, 1:nrow(Erie)),
  function(r) {
    return(aquaenv(S=0,t=0,p=0,SumCO2=NULL, pH=r$pH, TA=r$ALKALINITY..mg.L.)$SumCO2)
  }
)

为了遍历它,这会将 Erie data.frame 分成一组 data.frame(每行一个),并为每一行调用此函数。

mapply 方法稍微简洁一些:

mapply(
  function(pH, TA) {
    return(aquaenv(S=0,t=0,p=0,SumCO2=NULL, pH=pH, TA=TA)$SumCO2)
  }, Erie$pH, Erie$ALKALINITY..mg.L
)

一些与其他方法类似的问题:

  • Call apply-like function on each row of dataframe with multiple arguments from each row