Чтение файлов .csv, их преобразование и сохранение в формате .xlsx с использованием R - PullRequest
0 голосов
/ 13 января 2019

У меня есть папка с файлами .csv, которые нужно немного изменить, а затем сохранить как документ xlsx.

Поэтому я создал цикл для этого:

library(xlsx)
docs <- Sys.glob( "*.csv" )

for( i in docs )
{
  df <- read.csv(i)
  df2 <- select(df, X, Y)
  df3 <- mutate(df3, Z = (X - Y) / 3600)
  write.xlsx(df3, paste( "C:/users/Desktop/Files/", i), row.names = FALSE)
}

Однако, когда я выполняю этот цикл for, появляется следующее сообщение об ошибке:

Ошибка в createWorkbook (type = ext): неизвестный формат csv

Я что-нибудь забыл? Я был бы очень признателен, если бы вы могли мне помочь, поскольку я понятия не имею, что еще можно изменить ...

1 Ответ

0 голосов
/ 13 января 2019

Пакет rio устраняет большую часть головной боли с файлами xlsx. Его также можно использовать для чтения в файлах:

docs <- Sys.glob("*.csv")

for(i in docs) {
  df <- rio::import(i)
  df2 <- select(df, X, Y)
  df3 <- mutate(df3, Z = (X - Y) / 3600)
  rio::export(df3, paste0("C:/users/Desktop/Files/", i, ".xlsx"))
}

Это должно работать на части импорта / экспорта. В чем я не уверен, так это в вашем Sys.glob, так как никогда раньше этим не пользовался. Я считаю, list.files имеет очень простой и мощный синтаксис ...

Обновление

Если вы хотите избавиться от расширения файла .csv, вы можете использовать это вместо:

for(i in docs) {
  df <- rio::import(i)
  df2 <- select(df, X, Y)
  df3 <- mutate(df3, Z = (X - Y) / 3600)
  fname <- gsub(".csv$", "", i)
  rio::export(df3, paste0("C:/users/Desktop/Files/", fname, ".xlsx"))
}
...