簡體   English   中英

將數據從 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)

在此處輸入圖像描述

您可以在圖片上看到我從上面的代碼中得到的結果。 但是這個數字不能用於進行任何進一步的操作,例如與其他矩陣的加法。

有人遇到過這種問題嗎?

另一種選擇是openxlsx 它不依賴於 ,可以讀取、編輯和寫入Excel文件。 從包裝的描述中:

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')

除了這兩個基本功能之外, openxlsx還有許多其他用於操作Excel文件的功能。

例如,使用writeDataTable函數,您可以在Excel文件中創建格式化表格。

最近用的xlsx包,效果不錯。

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

其中 x 是一個 data.frame

writexl ,沒有Java要求:

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

WriteXLS包中的WriteXLS函數可以將數據寫入 Excel。

或者,來自xlsx包的write.xlsx也可以使用。

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

require(readODS)

tmp = file.path(tempdir(), 'iris.ods')
write_ods(iris, tmp)

如果我可以提供替代方案,您還可以將數據框保存在常規csv文件中,然后使用 Excel 中的“獲取數據”功能導入數據框。 這對我來說就像一個魅力,你不必為 R 中的任何 excel 包而煩惱。

這是一種通過不同 ID 將數據從數據幀寫入 excel 文件並通過與第一級 ID 關聯的另一個 ID 寫入不同選項卡(工作表)的方法。 想象一下,您有一個數據框,其中email_address作為許多不同用戶的一列,但每封電子郵件都有許多包含所有數據的“子 ID”。

data <- tibble(id = c(1,2,3,4,5,6,7,8,9), email_address = c(rep('aaa@aaa.com',3), rep('bbb@bbb.com', 3), rep('ccc@ccc.com', 3)))

因此 ids 1,2,3將與aaa@aaa.com相關聯。 以下代碼通過電子郵件拆分數據,然后將1,2,3放入不同的選項卡中。 重要的是在編寫.xlsx文件時設置append = True


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 = "sender@sender.com",
            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'))


我一直在嘗試不同的包,包括功能:

install.packages ("prettyR") 

library (prettyR)

delimit.table (Corrvar,"Name the csv.csv") ## Corrvar是我在縮放變量上運行回歸的輸出中的對象名稱。

但是,我為另一個分析的輸出(占用模型模型選擇輸出)嘗試了相同的代碼,但它不起作用。 經過多次嘗試和探索,我:

  • 從 R 復制輸出( Ctrl + c
  • 在 Excel 表中我粘貼了它( Ctrl + V
  • 選擇數據所在的第一列
  • 在“數據”小插圖中,單擊“文本到列”

  • 選擇分隔選項,點擊下一步

  • 勾選“分隔符”中的空格框,點擊下一步

  • 點擊完成(結束)

您現在的輸出應該是您可以在 excel 中輕松操作的形式。 因此,這可能不是最好的選擇,但如果您只想以另一種方式探索數據,它就可以解決問題。

PS。 如果 excel 中的標簽不是確切的標簽,那是因為我從我的西班牙語 excel 中翻譯了標簽。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM