如何将线性模型应用于数据框的特定部分?

How to apply a linear model to specific parts of a data frame?

我正在使用包含 3 列的数据框 (dt):TimeTempSpecies,例如

 Temp Time    Species
 1   10   241 Species-X
 2   11   241 Species-X
 3   12   241 Species-X
 4   13   241 Species-Y
 5   14   241 Species-Y
 6   15   240 Species-Z
...  ...  ...     ...
 41  50   178 Species-Z

第三栏有五个物种。 我想应用一个线性模型 (lm),其中 Temp 作为自变量,Time 作为因变量。 所以我只想针对物种 X 或 Y 测试它。此外,我想在给定的 Temp 间隔(假设 20 - 29 摄氏度)测试我的一个物种。 我试过:

lm(Temp ~ Time, data = td[Species =  Species-Y])

for(i in unique(td$Species)){
model <- list(model)
model[i] <- lm(td$Time ~ td$Temp)
}

model <- function (dados) {
    return(lm(td$Time[,dados] ~ td$Temp[,dados]))
  }
model(dados = td$Species-X)

base R中的by()函数提供了一种解决方案:

by(td, td$Species, function(df) lm(df[,"Temp"] ~ df[,"Time"]))

如果您想要对不同的子集使用不同的规则,您可能需要逐组进行。例如,要针对 20-29(含)的温度执行 Species-Y,您可以 运行:

lm(Temp ~ Time, data = td[td$Species == "Species-Y" & td$Temp >= 20 & td$Temp <= 29, ])