如何将R中介摘要转换为data.frame?
我使用了如何将R中介摘要转换为data.frame?,r,R,我使用了中介包中的summary()函数,希望将结果放入data.frame(这样我可以在将其保存到CSV文件之前进行更多操作) 这是摘要(中介)输出的一个示例 我尝试了broom包中的tidy函数和正常的data.frame()函数,但没有成功。更新(忘记下面丑陋的事情) 很难看,但它是有效的: library(mediation) library(sandwich) data("framing") med.fit <- lm(emo ~ treat + age + educ +
中介
包中的summary()
函数,希望将结果放入data.frame
(这样我可以在将其保存到CSV文件之前进行更多操作)
这是摘要(中介)
输出的一个示例
我尝试了broom
包中的tidy
函数和正常的data.frame()
函数,但没有成功。更新(忘记下面丑陋的事情)
很难看,但它是有效的:
library(mediation)
library(sandwich)
data("framing")
med.fit <- lm(emo ~ treat + age + educ + gender + income, data = framing)
out.fit <- glm(cong_mesg ~ emo + treat + age + educ + gender + income,
data = framing, family = binomial("probit"))
med.out <- mediate(med.fit, out.fit, treat = "treat", mediator = "emo",
robustSE = TRUE, sims = 100)
# extract summary
library(purrr)
summary(med.out) %>%
capture.output() %>%
discard(`==`, "") -> lines
lines[which(grepl("^ ", lines)):(which(grepl("^Sample", lines))-1)] %>%
sub("^ ", "med.out", .) %>%
gsub(" 95%", "_95%", .) %>%
gsub("CI ", "ci_", .) %>%
sub(" \\(", "_(", .) %>%
sub("p-", "p_", .) %>%
sub(" ", "_", ., fixed=TRUE) %>%
textConnection() %>%
read.table(header=TRUE) %>%
setNames(sub("_$", "", colnames(.))) %>%
dplyr::mutate(med.out=sub("\\.|_$", "", med.out),
med.out=gsub("_", " ", med.out))
## med.out Estimate_95. ci_Lower_95. ci_Upper p_value
## 1 ACME (control) 0.0873 0.0382 0.1593 0.00
## 2 ACME (treated) 0.0876 0.0434 0.1586 0.00
## 3 ADE (control) 0.0115 -0.0869 0.1169 0.86
## 4 ADE (treated) 0.0117 -0.0986 0.1238 0.86
## 5 Total Effect 0.0991 -0.0118 0.2160 0.10
## 6 Prop Mediated (control) 0.7862 -4.2247 6.1448 0.10
## 7 Prop Mediated (treated) 0.8044 -3.7360 5.6117 0.10
## 8 ACME (average) 0.0875 0.0409 0.1556 0.00
## 9 ADE (average) 0.0116 -0.0932 0.1204 0.86
## 10 Prop Mediated (average) 0.7953 -3.9803 5.8783 0.10
库(中介)
图书馆(三明治)
数据(“框架”)
中号线
行[其中(grepl(“^”,行)):(其中(grepl(“^Sample”,行))-1)]%>%
子(“^”,“中间输出“,)%>%
gsub(“95%,”_95%,)%>%
gsub(“CI”、“CI_257;”,)%>%
子(“\\(”,“\\”,)%>%
sub(“p-”,“p_-”,)%>%
sub(“,”_“,,fixed=TRUE)%>%
textConnection()%>%
read.table(header=TRUE)%>%
集合名称(sub(“$”,“”,colnames(.))%>%
dplyr::mutate(med.out=sub(“\\\.\u$”,“,med.out),
med.out=gsub(“,”,med.out))
##med.out估算值_95.ci_下限值_95.ci_上限值p_
##1 ACME(控制)0.0873 0.0382 0.1593 0.00
##2 ACME(处理过的)0.0876 0.0434 0.1586 0.00
##3 ADE(控制)0.0115-0.0869 0.1169 0.86
##4 ADE(处理)0.0117-0.0986 0.1238 0.86
##5总效应0.0991-0.01180.2160 0.10
##6 Prop介导(对照)0.7862-4.2247 6.1448 0.10
##7 Prop介导(治疗)0.8044-3.7360 5.6117 0.10
##8顶点(平均值)0.0875 0.0409 0.1556 0.00
##9 ADE(平均值)0.0116-0.0932 0.1204 0.86
##10道普介导(平均)0.7953-3.9803 5.8783 0.10
这很好用!谢谢!有没有办法将“fit_uu”更改为总结内容的名称?(在您的示例中是“med.out”)为该请求更新了它,并使med.out
列更干净。如果您在broom
包的github上提交一个问题,请求将其添加到tidy
generic中,我相当肯定David、Ben、Gavin或其他贡献者之一会将其添加到TODO中,顺便说一句,数据是估算值,95 CI较低,95 CI较高,P值(不是估计值95),但非常感谢您的帮助。我想我理解了修改它的文本替换。在新版本的R中,我现在得到:“扫描错误(file=file,what=what,sep=sep,quote=quote,dec=dec,:第5行没有6个元素”;我不确定这意味着什么,因为google和stackoverflow的答案处理了不同的错误示例。我在新的R版本中使用了“summary(Mediation)$d.avg,summary(Mediation)$d.avg.ci,summary(Mediation)$d.avg.p,summary(Mediation)$z.avg,summary(Mediation)$z.avg.ci,summary(Mediation)$z.avg.p,summary(Mediation)$tau.coef,summary(Mediation)$tau.ci,summary(Mediation)$tau.p,summary(Mediation)$n.avg,summary(Mediation)$n.avg.ci,summary(Mediation)$n.avg.p'但我期待着与它合作
extract_mediation_summary(summary(med.out))
## Estimate 95% CI Lower 95% CI Upper p-value
## ACME (control) 0.083271207 0.03938198 0.1334100 0.00
## ACME (treated) 0.083228279 0.03685293 0.1328788 0.00
## ADE (control) 0.009957454 -0.10992815 0.1705339 0.90
## ADE (treated) 0.009914526 -0.12182752 0.1781260 0.90
## Total Effect 0.093185734 -0.03049831 0.2458085 0.16
## Prop. Mediated (control) 0.807209060 -7.10847324 8.8136165 0.16
## Prop. Mediated (treated) 0.820068951 -6.45663184 8.2852297 0.16
## ACME (average) 0.083249743 0.03910592 0.1322914 0.00
## ADE (average) 0.009935990 -0.11587783 0.1743300 0.90
## Prop. Mediated (average) 0.813639005 -6.78255254 8.5494231 0.16
library(mediation)
library(sandwich)
data("framing")
med.fit <- lm(emo ~ treat + age + educ + gender + income, data = framing)
out.fit <- glm(cong_mesg ~ emo + treat + age + educ + gender + income,
data = framing, family = binomial("probit"))
med.out <- mediate(med.fit, out.fit, treat = "treat", mediator = "emo",
robustSE = TRUE, sims = 100)
# extract summary
library(purrr)
summary(med.out) %>%
capture.output() %>%
discard(`==`, "") -> lines
lines[which(grepl("^ ", lines)):(which(grepl("^Sample", lines))-1)] %>%
sub("^ ", "med.out", .) %>%
gsub(" 95%", "_95%", .) %>%
gsub("CI ", "ci_", .) %>%
sub(" \\(", "_(", .) %>%
sub("p-", "p_", .) %>%
sub(" ", "_", ., fixed=TRUE) %>%
textConnection() %>%
read.table(header=TRUE) %>%
setNames(sub("_$", "", colnames(.))) %>%
dplyr::mutate(med.out=sub("\\.|_$", "", med.out),
med.out=gsub("_", " ", med.out))
## med.out Estimate_95. ci_Lower_95. ci_Upper p_value
## 1 ACME (control) 0.0873 0.0382 0.1593 0.00
## 2 ACME (treated) 0.0876 0.0434 0.1586 0.00
## 3 ADE (control) 0.0115 -0.0869 0.1169 0.86
## 4 ADE (treated) 0.0117 -0.0986 0.1238 0.86
## 5 Total Effect 0.0991 -0.0118 0.2160 0.10
## 6 Prop Mediated (control) 0.7862 -4.2247 6.1448 0.10
## 7 Prop Mediated (treated) 0.8044 -3.7360 5.6117 0.10
## 8 ACME (average) 0.0875 0.0409 0.1556 0.00
## 9 ADE (average) 0.0116 -0.0932 0.1204 0.86
## 10 Prop Mediated (average) 0.7953 -3.9803 5.8783 0.10