R-通过缺少值的数据框按列循环lm()

问题描述 投票:1回答:4

我正在处理一个至少包含三个变量(波长,辐照度,x)的数据框,我对其进行了旋转,以便每个波长都是一个新行,因此允许我在每个波长上运行lm()并提取系数,所以我可以看到x如何随波长和辐照度变化。

但是,我能够使其正常工作的唯一方法是在每个波长上显式运行lm()。这对于较大的数据帧将不可行,因为较大的数据帧将具有数百个随波长和辐照度变化的参数。

我感觉可以使用'apply'或编写一个循环来解决,但是我没有运气使它们工作。

请参见下面的问题示例。

我还是很新,所以任何指针都值得赞赏

irr = rnorm(33, 10, 3)
wave = c(290, 290, 290, 300, 300, 300, 310, 310, 310, 320, 320, 320, 330, 330, 330, 340, 340, 340, 350, 350, 350, 360, 360, 360, 370, 370, 370, 380, 380, 380, 400, 400, 400)
x = rnorm(33, 50, 2)
df <- as.data.frame(cbind(wave, irr, x))
df_wide <- df %>%
  pivot_wider(names_from = "wave",
              values_from = "x")
"290_lm" <- lm(df_wide$`290` ~ df_wide$irr) 
"300_lm" <- lm(df_wide$`300` ~ df_wide$irr) #etc through each wavelength

## Attempt at loop

for (i in 2:(ncol(df_wide))){
  irr <- df_wide[2][i]
  lm_function <- paste(irr,
                       sep = "~")
  df_lm = lm(lm_function, 
             data = df_wide[2:12])
}
r loops apply lm
4个回答
0
投票

如果保持长格式,这可能会容易很多。只需使用lapply子集数据即可。使用setNames,结果列表将获得漂亮的名称。


0
投票

据我所知,您的问题与purrr::map的示例相同,因此无需广而告之。


0
投票

其他解决方案


0
投票

或类似如下:

© www.soinside.com 2019 - 2024. All rights reserved.