Экспорт данных в 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)

Вы можете видеть на фотографиях результат, который я получил из этих кодов выше. Но эти числа нельзя использовать для дальнейших операций, таких как сложение с другими матрицами.

Кто-то испытывал такие проблемы?

8 ответов

Другим вариантом является openxlsx-package. Он не зависит от Java и может читать, редактировать и писать файлы Excel. Из описания из пакета:

openxlsx упрощает процесс написания и стилизации файлов Excel xlsx из R и устраняет зависимость от 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-package имеет множество других функций для работы с файлами 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.

Как вариант, write.xlsx из пакета xlsx также будет работать.

Можно также использовать пакет readODS . Конечно, это не производит .xlsx, но Excel также может читать файлы Open Document Spreadsheet (ODS) / LibreOffice.

      require(readODS)

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

Если бы я мог предложить альтернативу, вы также могли бы сохранить свой фрейм данных в обычномcsvфайл, а затем используйте функцию «получить данные» в Excel для импорта фрейма данных. Это сработало для меня как шарм, и вам не нужно беспокоиться о каких-либо пакетах Excel в R.

Вот способ записи данных из фрейма данных в файл Excel с разными идентификаторами и на разные вкладки (листы) с помощью другого идентификатора, связанного с идентификатором первого уровня. Представьте, что у вас есть фрейм данных,email_address как один столбец для нескольких разных пользователей, но в каждом электронном письме есть несколько "дополнительных идентификаторов", содержащих все данные.

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

Итак, идентификаторы 1,2,3 будет связан с aaa@aaa.com. Следующий код разделяет данные по электронной почте, а затем помещает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 = "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.

Другие вопросы по тегам