我喜欢使用R进行统计分析,但发现很难比较不同模型的输出。
有没有办法,我们可以将输出导出到excel 以使其更具可读性(使用一些格式,如科学数字符号,条件格式等)?
根据@ 42 How to Copy Summary() output from R to Excel的建议,我尝试了capture.output(),但它没有正常工作。我搜索了很多,无法找到解决方案。
答案 0 :(得分:5)
使用包XLConnect
,您可以将R输出写入Excel文件。
这是一个例子,我写一个模型并将摘要发送到excel:
library(XLConnect)
dat <- data.frame(rsp = rnorm(100, 0, 1),
pred1 = rnorm(100, 0, 1),
pred2 = rnorm(100, 0, 1))
model <- lm(rsp ~ pred1 + pred2, data = dat)
writeWorksheetToFile("model1.xlsx",
data = summary(dat),
sheet = "summary",
header = TRUE,
clearSheets = TRUE)
答案 1 :(得分:1)
如果您尝试导出summary
功能的输出,请尝试此
write.csv(summary(data_frame),"output.csv")
答案 2 :(得分:1)
前一段时间我遇到了同样的问题,并开始使用包stargazer
。它不会将输出导出到Excel,而是生成可以复制粘贴到Excel的漂亮的HTML,Latex和ASCII表。在我看来,包的强度在于它允许快速创建一个比较不同模型的表。
更多信息:https://cran.r-project.org/web/packages/stargazer/vignettes/stargazer.pdf
答案 3 :(得分:1)
正如@David_B所说,stargazer
包对于简单表非常好,可以输出到txt,html。
如果要将数据框输出为Excel文件,请查看xlsx
包。
请注意,xlsx
不能与dplyr tbl_df
一起使用,您需要将其定义为数据框,例如
write.xlsx (x = as.data.frame(df), file = "foo.xlsx")
答案 4 :(得分:0)
您可以使用write.csv()
或write.csv2()
将数据写入.csv文件。如果要编辑格式等,可以在Excel中打开CSV文档并保存为.xls。
这不是解决方案,而是运行options(scipen=100)
。这将R配置为不使用科学记数法,因此当您查看数据帧时,您会看到常规十进制形式的数值。
答案 5 :(得分:0)
我使用&#34; readxl&#34;包。它非常适合将数据导出到excel。
install.packages("readxl")
library(readxl)
input <- read_excel("data/mydata.xlsx")
您可以选择使用此处提供的选项将数据导出到SAS,数据库或在线:https://www.blue-granite.com/blog/importing-and-exporting-getting-data-into-and-out-of-r
答案 6 :(得分:0)
我通过剪贴板提出了一个简单的解决方案。 “功能”选项卡将正常输出发送到控制台,并将制表符分隔的版本发送到剪贴板。然后,您可以直接粘贴,例如进入excel。
tabout <- function(output){
print(output)
capture.output(output, file = "clipboard", append = FALSE,
type = "output", split = FALSE)
lines <- readClipboard()
for(i in 1 : 5) {lines <- gsub(" ", " ", lines, fixed=TRUE)}
lines <- gsub(" ", "\t", lines, fixed=TRUE)
writeClipboard(lines)
}
myanova <- Anova(mymodel, type="III")
tabout(myanova)
虽然这是mocog =银河系的大多数普通代码; ^),但它确实将数字放在列中。下面稍微复杂的版本使用一组包含空格的短语,但应在输出中保留一个部分(即不应通过插入标签进行拆分)。
glmphrases <- c(
"Sum Sq", "F value", "Std. Error", "t value", "test statistic",
"test stat", "approx F", "num Df", "den Df", "p adj",
" = ", " ~ ", " : ", " on ", " and ", "Signif. codes: 0",
"'***' 0.001", "'**' 0.01", "'*' 0.05", "'.' 0.1", "' ' 1"
)
tabout <- function(output, phrases = glmphrases){
# send "output" to the console and a copy to the clipboard
print(output)
capture.output(output, file = "clipboard", append = FALSE,
type = "output", split = FALSE)
lines <- readClipboard()
# collapse repeated blanks and replace with tabs
for(i in 1 : 5) {lines <- gsub(" ", " ", lines, fixed=TRUE)}
lines <- gsub(" ", "\t", lines, fixed=TRUE)
# retain each phrase in one piece and write back to clipboard
phrases.tab <- gsub(" ", "\t", phrases, fixed=TRUE)
for(i in 1 : length(phrases)){
lines <- gsub(phrases.tab[i], phrases[i], lines, fixed=TRUE)
}
writeClipboard(lines)
}
myanova <- Anova(mymodel, type="III")
tabout(myanova)
希望这是有用的,最好的祝福
Kleks