我最近在R上工作了很多,但是列表经验几乎为零。因此,现在有了清单,我真的不知道该怎么办。我有一个数据框df
,它是通过应用以下函数创建的
df <- data.table(df)[, .(nm = names(.SD),fits = lapply(.SD, function(x) if(is.numeric(x)) summary(lm(y ~ x, na.action=na.omit)))), .SDcols = -1]
它由一列具有变量名称的列和一列具有该变量名称的摘要统计信息的列组成,如下所示:
nm fits
1 A list(call = lm(formula = y ~ x, na.action=na.omit))
2 B list(call = lm(formula = y ~ x, na.action=na.omit))
3 C list(call = lm(formula = y ~ x, na.action=na.omit))
4 D list(call = lm(formula = y ~ x, na.action=na.omit))
通过申请:
dfoutput <- lapply(df$fits, function(x) x$coefficients[c(2),])
对于每个变量,我得到以下示例输出:
Estimate Std. Error t value Pr(>|t|)
x -8.72283 0.68552 -12.72 <2e-16
我想做的是将dfoutput
中的每个列表转换为数据帧中的一行,同时考虑变量名nm
,最好使用列:Estimate Std. Error t value Pr(>|t|)
),给我以下示例输出:
Varname Estimate Std. Error t value Pr(>|t|)
A -8.72283 0.68552 -12.72 <2e-16
B -0.72283 0.38552 -12.72 <2e-16
C -2.72283 0.28552 -12.72 <2e-16
D -1.72283 1.68552 -12.72 <2e-16
有人会善良地帮助我吗?
答案 0 :(得分:1)
我相信您只想要do.call(rbind, x)
使用以下数据查看结果:
do.call(rbind, dfoutput)
# Estimate Std. Error t value Pr(>|t|)
# [1,] -0.2233611 0.15508093 -1.440287 1.518983e-01
# [2,] 0.4089223 0.01889134 21.646019 1.038667e-47
# [3,] 0.8885803 0.05137355 17.296454 2.325498e-37
cbind(df, do.call(rbind, dfoutput))
# nm fits Estimate Std. Error t value Pr(>|t|)
# 1: Sepal.Width <summary.lm> -0.2233611 0.15508093 -1.440287 1.518983e-01
# 2: Petal.Length <summary.lm> 0.4089223 0.01889134 21.646019 1.038667e-47
# 3: Petal.Width <summary.lm> 0.8885803 0.05137355 17.296454 2.325498e-37
数据
library(data.table)
y <- iris$Sepal.Length
df0 <- iris[-5]
df <- data.table(df0)[, .(nm = names(.SD),fits = lapply(.SD, function(x) if(is.numeric(x)) summary(lm(y ~ x, na.action=na.omit)))), .SDcols = -1]
# nm fits
# 1: Sepal.Width <summary.lm>
# 2: Petal.Length <summary.lm>
# 3: Petal.Width <summary.lm>
dfoutput <- lapply(df$fits, function(x) x$coefficients[c(2),])
dfoutput
# [[1]]
# Estimate Std. Error t value Pr(>|t|)
# -0.2233611 0.1550809 -1.4402871 0.1518983
#
# [[2]]
# Estimate Std. Error t value Pr(>|t|)
# 4.089223e-01 1.889134e-02 2.164602e+01 1.038667e-47
#
# [[3]]
# Estimate Std. Error t value Pr(>|t|)
# 8.885803e-01 5.137355e-02 1.729645e+01 2.325498e-37
答案 1 :(得分:1)
使用plyr
软件包:只需将公式替换为ldply
library(plyr)
ldply(df$fits,function(x) x$coefficients[c(2),])
输出:
Estimate Std. Error t value Pr(>|t|)
1 -0.2233611 0.15508093 -1.440287 1.518983e-01
2 0.4089223 0.01889134 21.646019 1.038667e-47
3 0.8885803 0.05137355 17.296454 2.325498e-37
答案 2 :(得分:1)
我们可以使用tidyverse
library(tidyverse)
map_df(lst1, as.list)
# A tibble: 3 x 4
# Estimate `Std. Error` `t value` `Pr(>|t|)`
# <dbl> <dbl> <dbl> <dbl>
#1 -0.223 0.155 -1.44 1.52e- 1
#2 0.409 0.0189 21.6 1.04e-47
#3 0.889 0.0514 17.3 2.33e-37
如果我们也需要'nm'列,请在该列中命名'lst1'并使用.id
set_names(lst1, LETTERS[1:3]) %>%
map_df(as.list, .id = 'Varname')
# A tibble: 3 x 5
# Varname Estimate `Std. Error` `t value` `Pr(>|t|)`
# <chr> <dbl> <dbl> <dbl> <dbl>
#1 A -0.223 0.155 -1.44 1.52e- 1
#2 B 0.409 0.0189 21.6 1.04e-47
#3 C 0.889 0.0514 17.3 2.33e-37