R - Экспортировать построчно при преобразовании данных, добавляя местами, а не другими, а также удаляя NA

Я новичок в R, но мне нужно экспортировать данные из data.table в CSV, однако мне нужно добавить строку верхнего и нижнего колонтитула и преобразовать данные в процессе.

Маршрут, по которому я пошел, - через раковину и кошку. Это позволяет мне генерировать строки заголовка и нижнего колонтитула и выгружать 30000+ строк data.table в CSV через a_ply.

sink(filelocation)
cat("\"EX1\",1,\"EX2\",",time,sep="") #header
cat("\n")
a_ply(datatable1, 1, function(x){
cat("\"L1\",")
cat(paste(x, collapse=","))
cat("\n")
}) 
cat("\"EX3\",",EX4, sep="") #footer
sink()

У меня все это работает отлично, однако часть, с которой я борюсь, заключается в том, что мне нужно преобразовать данные, которые хранятся в таблице данных. Существует требование, чтобы некоторые столбцы в таблице данных экспортировались как «Значение», а другие оставлялись как «Значение». Также требуется удалить значения NA, оставив их либо как ,"", либо просто как ничего ,,.

e.g.

Эта линия

SystemID    UserID      Age Active  Status  LastAccess  LastAccessTime  Count
1234567     852741      39  Y       1       NA          NA             12

В настоящее время экспортируется как

1234567,852741,39,Y,1,NA,NA,12

Хотя мне нужно, чтобы он был экспортирован как

1234567,"852741",39,"Y",1,,"",12

Data.tables, которые мне нужно экспортировать, имеют длину 30000+, поэтому мне было интересно, есть ли лучший способ пойти с этим или как структурировать код для преобразования каждой строки на лету, а затем переместить эту строку в файл и переместить на следующую строку.

Я не могу изменить систему, в которую попадают эти файлы, поэтому, к сожалению, мне приходится иметь дело с жестким характером файла данных.


person Richard    schedule 13.06.2013    source источник


Ответы (1)


Если я правильно понимаю, я думаю, что функция write.table() делает все, что вы хотите.

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

myData$UserID<-as.character(myData$UserID)

После того, как кадр данных правильно отформатирован, он должен быть таким же простым, как

write.table(myData,outFilePath,sep=",",na="",row.names=FALSE)

Обратите внимание на аргумент na="", который указывает, как форматировать значения NA. Для строки нижнего колонтитула вы можете обрабатывать это отдельно и использовать аргумент «append = TRUE».

person Andrew Barr    schedule 13.06.2013
comment
ХОРОШО. Я расследую это и посмотрю, смогу ли я найти решение. Знаете ли вы, можно ли обрабатывать целочисленные/числовые NA иначе, чем символьные NA? - person Richard; 13.06.2013
comment
Вы можете изменить символ NA на пустую строку. Похоже, у вас есть LastAccessTime в виде строки, и вы хотите записать ее как пустую строку с кавычками. Поэтому попробуйте заменить символы NA в исходном фрейме данных следующим образом myData$LastAccessTime[is.na(myData$LastAccessTime)]>='' Тогда вы, вероятно, захотите использовать аргумент quote=TRUE в write.table(), чтобы убедиться, что кавычки записаны. - person Andrew Barr; 13.06.2013
comment
Спасибо за вашу помощь, я все ближе и ближе к нужному решению. Однако я попытался заменить NA в кадре данных, используя предоставленный код, однако это ничего не изменило. - person Richard; 13.06.2013
comment
Упс.....Похоже, в моем комментарии опечатка, попробуйте myData$LastAccessTime[is.na(myData$LastAccessTime)]<-''. Я бы отредактировал, если бы мог. - person Andrew Barr; 13.06.2013