Экспорт данных в 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)
Можно также использовать пакет 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.