首页
学习
活动
专区
圈层
工具
发布

申请
EN

Stack Overflow用户
提问于 2021-10-15 16:25:09
回答 2查看 37关注 0票数 0

我试图将线性回归应用于数据帧列表,并对特定值进行筛选。例如,有一个Iris数据帧列表,我试图为Sepal.Length ~ Sepal.Width运行一个回归,每个物种运行一个不同的回归。

代码语言:javascript
复制
test <- dlply(iris, "Species", function(x) lm(Sepal.Length ~ Sepal.Width, data = x))

但是我想同时做一个数据列表,而不是单独的。因此,假设我有一个多个虹膜数据帧的列表:

代码语言:javascript
复制
 iris1 <- iris
 iris2 <- iris
 iris3 <- iris
iris_list <- list(iris1, iris2, iris3) 

因此,要将dlply代码运行到iris_list,我就迷路了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-15 17:27:26

使用lapply

代码语言:javascript
复制
res = lapply(iris_list, function(x){
  test <- dlply(x, "Species", function(x) lm(Sepal.Length ~ Sepal.Width, data = x))
  return(test)
})
票数 1
EN

Stack Overflow用户

发布于 2021-10-15 17:22:37

purrr

如果要在数据帧列表中应用回归,请尝试使用purrr::map

代码语言:javascript
复制
library(purrr)

map(iris_list, ~ lm(Sepal.Length ~ Sepal.Width, data = .x))

如果您想根据一个因子将一个数据帧分割成一个列表,您可以首先使用基数R中的split

代码语言:javascript
复制
imap(split(iris, ~ Species), ~ lm(Sepal.Length ~ Sepal.Width, data = .x))

注意:在本例中,imap用于保留列表名称,在本例中是Species的级别。

碱基R

如果您只想使用基数R和lapply,那么这将有效:

代码语言:javascript
复制
lapply(split(iris, ~ Species), function(x) lm(Sepal.Length ~ Sepal.Width, data = x))

如果有嵌套列表,则需要嵌套映射:

代码语言:javascript
复制
library(purrr)

map(iris_list, ~ imap(split(.x, ~ Species), ~ lm(Sepal.Length ~ Sepal.Width, data = .x)))

再一次在R基:

代码语言:javascript
复制
lapply(iris_list, function(x) lapply(split(x, ~ Species), function(y) lm(Sepal.Length ~ Sepal.Width, data = y)))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69587835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档