将数据从 R 导出到 Excel

Export data from R to Excel

提问人:ntamjo achille 提问时间:10/17/2013 最后编辑:starballntamjo achille 更新时间:12/27/2022 访问量:358185

问:

我正在编写代码以将数据库从 R 导出到 Excel,我一直在尝试其他代码,包括:

write.table(ALBERTA1, "D:/ALBERTA1.txt", sep="\t")
write.csv(ALBERTA1,":\ALBERTA1.csv")
your_filename_in_R = read.csv("ALBERTA1.csv")
your_filename_in_R = read.csv("ALBERTA1.csv")
write.csv(df, file = "ALBERTA1.csv")
your_filename_in_R = read.csv("ALBERTA1.csv")
write.csv(ALBERTA1, "ALBERTA1.csv")
write.table(ALBERTA1, 'clipboard', sep='\t')
write.table(ALBERTA1,"ALBERTA1.txt")
write.table(as.matrix(ALBERTA2),"ALBERTA2.txt")
write.table(as.matrix(vecm.pred$fcst$Alberta_Females[,1]), "vecm.pred$fcst$Alberta_Females[,1].txt")
write.table(as.matrix(foo),"foo.txt")
write.xlsx(ALBERTA2, "/ALBERTA2.xlsx")
write.table(ALBERTA1, "D:/ALBERTA1.txt", sep="\t").

这个论坛的其他用户建议我:

write.csv2(ALBERTA1, "ALBERTA1.csv")
write.table(kt, "D:/kt.txt", sep="\t", row.names=FALSE)

enter image description here

您可以在图片上看到我从上面的代码中得到的结果。但是这个数字不能用于进行任何进一步的运算,例如与其他矩阵相加。

有人遇到过这种问题吗?

Excel R-FAQ Java

评论

1赞 IRTFM 10/17/2013
如果您不发布输出,我们将无法提供帮助。会有太多的猜测。dput(ALBERTA1)dput(head(ALBERTA1))
1赞 joran 10/17/2013
请注意,这显然是对这个问题的跟进。
0赞 ntamjo achille 10/17/2013
RGUI界面上的前6个数字如下:55.5486398、57.8471114、54.5190511、50.5751821、49.4739451、53.4697459。您可以查看每个输出都有一个简短的小数部分。但是,当我通过上面显示的代码在 Excel 上传输相同的数字列表时,我得到以下不清楚的输出形状:555.486.398.454.784、578.471.113.839.479、54.519.051.119.506、49.473.945.115.391、534.697.459.336.592、505.751.821.039.884..等当然是无法管理的 你可以看到 555.486.398.454.784(在 excel 中)与 55.5486398(R-gui 界面)完全不同。

答:

11赞 Christopher Louden 10/17/2013 #1

WriteXLS 包中的 WriteXLS 函数可以将数据写入 Excel。

或者,xlsx 包中的 write.xlsx 也可以工作。

评论

10赞 StasK 7/26/2016
xlsx需要 Java。 需要 Perl。如果由于某种原因 R 无法访问这些内容(我无法轻易选择要在我的公司计算机上安装的内容),那么这些都不起作用。(我知道开发人员依赖现有的 Java 和 Perl 库很方便;但 R 不应该靠自己的腿站立吗??WriteXLS
1赞 Ruben 2/28/2017
writeXLS无法处理字符中的换行符。
41赞 d2a2d 10/27/2014 #2

最近使用的xlsx包,效果很好。

library(xlsx)
write.xlsx(x, file, sheetName="Sheet1")

其中 x 是 Data.Frame

评论

25赞 StasK 7/26/2016
xlsx需要 Java。如果由于某种原因无法通过 R(公司计算机上的奇怪设置)访问它,那么这将不起作用。
1赞 indra_patil 10/15/2016
将 java 的 jre path 添加到系统变量 Path 中,然后 R 就可以访问 Java 功能了。为此,请转到“我的计算机属性”,然后转到“高级系统设置”,然后转到“环境变量”。将 java 路径添加到“Path”。
-4赞 Fabiola 9/13/2015 #3

我一直在尝试不同的软件包,包括以下功能:

install.packages ("prettyR") 

library (prettyR)

delimit.table (Corrvar,"Name the csv.csv") ## Corrvar是我在缩放变量上运行回归的输出中的对象名称。

但是,我对另一个分析的输出(占用模型模型选择输出)尝试了相同的代码,但它不起作用。经过多次尝试和探索,我:

  • 复制了 R (Ctrl+c)
  • 在Excel工作表中,我粘贴了它(Ctrl+V)
  • 选择数据所在的第一列
  • 在“数据”小插图中,单击“文本到列”

  • 选择“分隔”选项,单击“下一步”

  • 勾选“分隔符”中的空格框,点击下一步

  • 单击“完成(结束)”

您的输出现在应该采用您可以在 excel 中轻松操作的形式。因此,也许不是最奇特的选择,但如果您只想以另一种方式探索数据,它就可以解决问题。

如果 excel 中的标签不是确切的标签,那是因为我翻译了西班牙语 excel 中的标签。

29赞 lukeA 9/20/2017 #4

writexl,没有 Java 要求:

# install.packages("writexl")
library(writexl)
tempfile <- write_xlsx(iris)

评论

0赞 Julian Drago 1/19/2019
不幸的是,对于公司计算机来说也不是很好:“软件包仅以源代码形式提供,并且可能需要编译 C/C++/Fortran:'writexl' 这些不会被安装”
0赞 lukeA 1/20/2019
@JulianDrago 你不能在非公司计算机上编译它吗?
2赞 Julian Drago 1/20/2019
从对这个问题的评论来看,对我来说不是一个选择,对许多其他人来说也不是一个选择。我的评论旨在提醒我们这些人,这可能不适用于防火墙/非管理员用户的工作环境 - 我怀疑我们中的许多人出于这个原因来到这里,寻找可能有效的流行 xlsx 包的替代品。
92赞 Jaap 9/20/2017 #5

另一个选项是 -package。它不依赖于 ,可以读取、编辑和写入 Excel 文件。从包装的描述中:openxlsx

openxlsx 简化了从 R 编写和样式化 Excel xlsx 文件的过程,并消除了对 Java 的依赖

用法示例:

library(openxlsx)

# read data from an Excel file or Workbook object into a data.frame
df <- read.xlsx('name-of-your-excel-file.xlsx')

# for writing a data.frame or list of data.frames to an xlsx file
write.xlsx(df, 'name-of-your-excel-file.xlsx')

除了这两个基本函数之外,-package 还具有许多其他用于操作 Excel 文件的函数。openxlsx

例如,使用 -function,您可以在 Excel 文件中创建格式化表。writeDataTable

评论

3赞 Arani 1/2/2018
openxlsx依赖于 Rtools,需要安装并添加到系统变量路径中。不适用于公司计算机。我使用它,现在试图寻找替代方案,因为我需要制作我的代码的可移植版本,这些版本无需安装任何东西即可工作。
3赞 Jaap 1/2/2018
@Arani我对此表示高度怀疑。我已经在没有 Rtools 的情况下安装在 Windows VM 上,它正常工作。openxlsx
1赞 Arani 1/3/2018
就我而言,它执行除 或 .为此,它要求 Rtools。神秘!saveWorkbookwrite.xlsx
0赞 Mostafa90 6/29/2018
@jaap某些功能依赖于 Rtools,但不是全部
3赞 Mostafa90 7/3/2018
@Jaap是,请 github.com/awalker89/openxlsx/issues/111 检查此页面
-2赞 Primesty 7/23/2020 #6

这是一种通过不同的 ID 将数据从数据帧写入 excel 文件的方法,并通过与第一级 ID 关联的另一个 ID 将数据写入不同的选项卡(工作表)的方法。想象一下,您有一个数据帧,该数据帧具有多个不同用户的一列,但每封电子邮件都有许多包含所有数据的“子 ID”。email_address

data <- tibble(id = c(1,2,3,4,5,6,7,8,9), email_address = c(rep('[email protected]',3), rep('[email protected]', 3), rep('[email protected]', 3)))

因此,ids 将与 .以下代码通过电子邮件拆分数据,然后放入不同的选项卡中。重要的是在写入文件时进行设置。1,2,3[email protected]1,2,3append = True.xlsx


temp_dir <- tempdir()

for(i in unique(data$email_address)){
    
  data %>% 
    filter(email_address == i) %>% 
    arrange(id) -> subset_data
  
  for(j in unique(subset_data$id)){
    write.xlsx(subset_data %>% filter(id == j), 
      file = str_c(temp_dir,"/your_filename_", str_extract(i, pattern = "\\b[A-Za-z0- 
       9._%+-]+"),'_', Sys.Date(), '.xlsx'), 
      sheetName = as.character(j), 
      append = TRUE)}
 
  }

正则表达式从电子邮件地址获取名称并将其放入文件名中。

希望有人觉得这很有用。我敢肯定有更优雅的方法可以做到这一点,但它是有效的。

顺便说一句,这是一种将这些单个文件发送到 .代码进入第二个循环data.frame[j]

  send.mail(from = "[email protected]",
            to = i,
          subject = paste("Your report for", str_extract(i, pattern = "\\b[A-Za-z0-9._%+-]+"), 'on', Sys.Date()),
          body = "Your email body",
          authenticate = TRUE,
          smtp = list(host.name = "XXX", port = XXX,
                      user.name = Sys.getenv("XXX"), passwd = Sys.getenv("XXX")),
          attach.files = str_c(temp_dir, "/your_filename_", str_extract(i, pattern = "\\b[A-Za-z0-9._%+-]+"),'_', Sys.Date(), '.xlsx'))


2赞 andschar 4/16/2022 #7

也可以使用 readODS 包。当然,它不会生成 ,但 Excel 也可以读取 Open Document Spreadsheet (ODS) / LibreOffice 文件。.xlsx

require(readODS)

tmp = file.path(tempdir(), 'iris.ods')
write_ods(iris, tmp)
0赞 lukitamodric 6/17/2022 #8

如果我可以提供另一种选择,您还可以将数据帧保存在常规文件中,然后使用 Excel 中的“获取数据”功能导入数据帧。这对我来说就像一个魅力,你不需要为R中的任何excel包而烦恼。csv