我是一名R老手,通常讨厌使用嵌套列表,因为它们看起来很棘手..但我不确定我能在这里避开它们.在这种情况下,我可以生成我想要的输出,但我不知道一旦创建列表,如何智能地分解列表.

我试图从一个数据集中为一个类的每个级别创建n个线性模型.运行所有模型后,我想要一个简单的表,其中包含每个级别的斜坡、拦截和类.下面的例子就是我想要的:

# Dummy data
d <- data.frame(x=rnorm(50, 10, 1), 
                y=rnorm(50, 0, 2), 
                class=c(rep('A',10),rep('B',10),rep('C',10),rep('D',10),rep('E',10)))

# Split the data by grouping variable
d.s <-  split(d, d$class)

# Create a linear model from y~x in each class
coeffs <- function(df) {
  m <- lm(y~x, data = df)$coefficients
}

m.s <- lapply(d.s, coeffs)

# How do I neatly get a data frame that looks like below out of m.s??

wanted <- data.frame(class=as.character(), slope=as.numeric(), intercept=as.numeric())

请原谅我对嵌套列表的厌恶和缺乏经验!经过很多行取消列出和区分行名后,我可以得到我想要的东西,但一定有更好的方法.我正在努力改变.

推荐答案

你首先可以使用sapply

> t(sapply(d.s, coeffs))
  (Intercept)          x
A   9.4390072 -0.8430022
B  -5.2018384  0.4988027
C  -7.9531678  0.8298487
D  -0.9505984  0.1192621
E  -1.8155237  0.1522270

> data.frame(sort(unique(d$class)), t(sapply(d.s, coeffs))) |> 
+   setNames(c('class', 'intercept', 'slope'))
  class  intercept      slope
A     A  9.4390072 -0.8430022
B     B -5.2018384  0.4988027
C     C -7.9531678  0.8298487
D     D -0.9505984  0.1192621
E     E -1.8155237  0.1522270

或者如果您依赖lapply,则为rbind结果.

> data.frame(names(m.s), do.call('rbind', m.s)) |> 
+   setNames(c('class', 'intercept', 'slope'))
  class  intercept      slope
A     A  9.4390072 -0.8430022
B     B -5.2018384  0.4988027
C     C -7.9531678  0.8298487
D     D -0.9505984  0.1192621
E     E -1.8155237  0.1522270

如果您在拦截之前想要really个斜坡,请这样做

> data.frame(class=names(m.s), do.call('rbind', m.s)[, 2:1]) |> 
+   setNames(c('class', 'slope', 'intercept'))
  class      slope  intercept
A     A -0.8430022  9.4390072
B     B  0.4988027 -5.2018384
C     C  0.8298487 -7.9531678
D     D  0.1192621 -0.9505984
E     E  0.1522270 -1.8155237

R相关问答推荐

管道末端运行功能

在R中查找每个组不同时间段的总天数

带有叠加饼图系列的Highmap

获取列中值更改的行号

ggplot2中的X轴显示数值,单位为百,而不是十

用相同方法得到不同函数的ROC最优截断值

为什么舍入POSIXct会更改能力以匹配等效的POSIXct?

计算时间段的ECDF(R)

在RStudio中堆叠条形图和折线图

计算数据帧中指定值之前的行数,仅基于每行之后的future 行,单位为r

使用R将简单的JSON解析为嵌套框架

如何删除设置大小的曲线图并添加条形图顶部数字的百分比

使用ggplot2中的sec_axis()调整次轴

将统计检验添加到GGPUBR中的盒图,在R

R -基线图-图形周围的阴影区域

计算使一组输入值最小化的a、b和c的值

使用geom_sf跨越日期线时的闭合边界

整理ggmosaic图的标签

R没有按顺序显示我的有序系数?

动态统计函数在ShinyApp内部更改