Добавить вектор как строку в файл CSV - PullRequest
8 голосов
/ 23 декабря 2011

То, что у меня уже есть:

Рассмотрим следующие данные - просто фиктивные данные, реальные данные создаются автоматически:

features <- numeric(0)
features <- c(features, 1, 2, 3, 4, 5, 6)
features2 <- numeric(0)
features2 <- c(features2, 1, 2, 3, 4, 5, 6)
featureVectors <- list()
featureVectors[["file1"]] <- features
featureVectors[["file2"]] <- features2
resultMatrix <- do.call(rbind, featureVectors)
colnames(resultMatrix) <- c("SPEC_MEAN", "SPEC_SD", "SPEC_MODE", "AUTOC_MEAN", "AUTOC_SD", "ZC_MEAN")

Это приводит к выводу, подобному следующему:

      SPEC_MEAN SPEC_SD SPEC_MODE AUTOC_MEAN AUTOC_SD ZC_MEAN
file1         1       2         3          4        5       6
file2         1       2         3          4        5       6

Я могу записать это в файл CSV, вызвав write.csv(resultMatrix, file="out.csv").


Что мне нужно:

Поскольку файл результатов (в настоящее время) только что создан нано я хотел бы записать эти features (то есть векторы) в файл CSV, как только они будут оценены.

Поэтому я подумал, что буду использовать write.csv и append, ноопция недоступна для метода.Тогда я подумал, что могу использовать write.table, но есть две проблемы:

  1. write.table не делает отступ в имени первого пустого столбца, таким образом, оставляя мою первую строку смещенной на одну влево.

  2. Данные каким-то образом неправильно транспонированы.См. Пример ниже.


То, что я пробовал:

Кроме того, вызов этих команд…

write.table(resultMatrix, file="data-appended.csv", sep=",")
write.table(features, file="data-appended.csv", sep=",", append=TRUE, col.names=FALSE)

… приводит к такому результату:

"SPEC_MEAN","SPEC_SD","SPEC_MODE","AUTOC_MEAN","AUTOC_SD","ZC_MEAN"
"file1",1,2,3,4,5,6
"file2",1,2,3,4,5,6
"1",1
"2",2
"3",3
"4",4
"5",5
"6",6

… это не то, что я хочу.Итак, как мне добавить содержимое вектора features, включая имя file, в уже существующий файл CSV?

1 Ответ

15 голосов
/ 23 декабря 2011

Две корректировки решат ваши две проблемы.

  • Чтобы сохранить отступ заголовков столбцов, используйте неинтуитивный (но задокументированный!) Аргумент col.names=NA:

    write.table(resultMatrix, file = "data-appended.csv", sep = ",", 
                col.names = NA)
    
  • Чтобы записать features (вектор) в виде строки, а не столбца, транспонируйте ее и преобразуйте в матрицу перед передачей в write.table():

    FF <- as.matrix(t(features))
    write.table(FF, file = "data-appended.csv", sep = ",", 
                col.names = FALSE, append=TRUE)
    
...