提问人:ntamjo achille 提问时间:10/17/2013 最后编辑:starballntamjo achille 更新时间:12/27/2022 访问量:358185
将数据从 R 导出到 Excel
Export data from R to Excel
问:
我正在编写代码以将数据库从 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)
您可以在图片上看到我从上面的代码中得到的结果。但是这个数字不能用于进行任何进一步的运算,例如与其他矩阵相加。
有人遇到过这种问题吗?
答:
WriteXLS 包中的 WriteXLS 函数可以将数据写入 Excel。
或者,xlsx 包中的 write.xlsx 也可以工作。
评论
xlsx
需要 Java。 需要 Perl。如果由于某种原因 R 无法访问这些内容(我无法轻易选择要在我的公司计算机上安装的内容),那么这些都不起作用。(我知道开发人员依赖现有的 Java 和 Perl 库很方便;但 R 不应该靠自己的腿站立吗??WriteXLS
writeXLS
无法处理字符中的换行符。
最近使用的xlsx包,效果很好。
library(xlsx)
write.xlsx(x, file, sheetName="Sheet1")
其中 x 是 Data.Frame
评论
xlsx
需要 Java。如果由于某种原因无法通过 R(公司计算机上的奇怪设置)访问它,那么这将不起作用。
我一直在尝试不同的软件包,包括以下功能:
install.packages ("prettyR")
library (prettyR)
delimit.table (Corrvar,"Name the csv.csv")
## Corrvar
是我在缩放变量上运行回归的输出中的对象名称。
但是,我对另一个分析的输出(占用模型模型选择输出)尝试了相同的代码,但它不起作用。经过多次尝试和探索,我:
- 复制了 R (Ctrl+c)
- 在Excel工作表中,我粘贴了它(Ctrl+V)
- 选择数据所在的第一列
在“数据”小插图中,单击“文本到列”
选择“分隔”选项,单击“下一步”
勾选“分隔符”中的空格框,点击下一步
单击“完成(结束)”
您的输出现在应该采用您可以在 excel 中轻松操作的形式。因此,也许不是最奇特的选择,但如果您只想以另一种方式探索数据,它就可以解决问题。
如果 excel 中的标签不是确切的标签,那是因为我翻译了西班牙语 excel 中的标签。
writexl
,没有 Java 要求:
# install.packages("writexl")
library(writexl)
tempfile <- write_xlsx(iris)
评论
另一个选项是 -package。它不依赖于 java,可以读取、编辑和写入 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
评论
openxlsx
依赖于 Rtools,需要安装并添加到系统变量路径中。不适用于公司计算机。我使用它,现在试图寻找替代方案,因为我需要制作我的代码的可移植版本,这些版本无需安装任何东西即可工作。
openxlsx
saveWorkbook
write.xlsx
这是一种通过不同的 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,3
append = 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'))
也可以使用 readODS 包。当然,它不会生成 ,但 Excel 也可以读取 Open Document Spreadsheet (ODS) / LibreOffice 文件。.xlsx
require(readODS)
tmp = file.path(tempdir(), 'iris.ods')
write_ods(iris, tmp)
如果我可以提供另一种选择,您还可以将数据帧保存在常规文件中,然后使用 Excel 中的“获取数据”功能导入数据帧。这对我来说就像一个魅力,你不需要为R中的任何excel包而烦恼。csv
上一个:基于每组行数的子集数据框
评论
dput(ALBERTA1)
dput(head(ALBERTA1))