将R输出导出到Excel

时间:2016-06-21 09:17:29

标签: r excel

我喜欢使用R进行统计分析,但发现很难比较不同模型的输出。

有没有办法,我们可以将输出导出到excel 以使其更具可读性(使用一些格式,如科学数字符号,条件格式等)?

根据@ 42 How to Copy Summary() output from R to Excel的建议,我尝试了capture.output(),但它没有正常工作。我搜索了很多,无法找到解决方案。

7 个答案:

答案 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