首页 > 解决方案 > 对 data.frame 的每一行执行 lm(),其中预测器长度不同

问题描述

我正在尝试创建一个循环,该循环在数据帧的每一行(响应)上针对数据帧外部的预测向量执行 lm。预测变量的值和长度取决于行所属的类别 (df$Group)。感谢您是否可以帮助我创建一个为每一行执行 lm 的循环,这也将系数保存到单个向量/数据帧中。此外,要通过多个具有相同结构的数据帧运行循环,然后将系数保存到单个数据帧,我应该对代码进行哪些更改?以下是我尝试过的 - 它不保存系数。

dfList <- list(df,df1,df2)

df <- data.frame(ID=c(1:10),Group=c("A","A","A","A","B","B","B","B","B","B"), T1= rnorm(10, mean=1, sd=1),
T2= rnorm(10, mean=2, sd=1),T3= seq(40,58,by=2),T4= seq(10,28,by=2))

A <- df$ID
B <- df$Group
C <- numeric(length=length(A))
x1 <- c(1:4)
x2 <- c(2:4)

for (i in length(A)){
  if(B[i] == "A"){C[i] <- apply(df[,c(3:6)],1,function(y) lm(y~x1)$coefficients[2])[i]}
  if(B[i] == "B"){C[i] <- apply(df[,c(4:6)],1,function(y)lm(y~x2)$coefficients[2])[i]}
}

感谢任何帮助!谢谢!

标签: rloopsdplyrapplylm

解决方案


你想做这样的事情吗?

list_df <- split(df, df$Group)
A_coeff <- apply(list_df[[1]][, 3:6], 1, function(y) lm(y~x1)$coefficients[2])
B_coeff <- apply(list_df[[2]][, 4:6], 1, function(y) lm(y~x2)$coefficients[2])

推荐阅读