2015-10-01 2 views
-1

моя проблема очень проста, у меня есть файл, который содержит много твитов за строку, не окруженную кавычками. После чтения файла я создал «набор данных», чтобы рандомизировать его и для устранения дубликатов:Прочитайте и напишите data.frames правильным способом

dataset <- read.table(file, header=FALSE, sep="\n", stringsAsFactors=F) 
unique_ds <- unique.data.frame(dataset) 
random_ds <- unique_ds[sample(nrow(unique_ds)),] 
write.table(data.frame(random_ds),file="tweets_final.txt", sep="\n", quote=F, col.names=F, row.names=F) 

random_ds имеет строки. Но когда я открываю свой файл, который я только что создал, я вижу более 5000 строк.

Первый вопрос: Я просто не могу понять , где есть проблема. Возможно ли это в write.table или в коде выше?

[считайте, что в каждом чириканье в исходном файле я удалил новую строку и возврат каретки; Java код ниже]

out = out.replaceAll("[\n\r]", " "); 

Второй вопрос: предполагают, чтобы добавить в каждой строке новую переменную (для примера категорию для твит), когда я буду читать его обратно в R, подобно CSV файл это формат соответствует: «мой твит», тип с кодом ниже?

ds <- read.csv(file = "tweet_classified.txt", header = FALSE, sep = ",",stringsAsFactors = FALSE, quote = "\"") 

В частности, как я мог управлять в Java/R проблемой котировок внутри кавычек?

благодаря

Важно Я только учитывать тот факт, что, очевидно, данные щебет содержат символ #, так что я бы задать еще один вопрос: есть ли possibile, что sobsitute хештегов с \ п? или просто считает это комментарием, и выбрасывает эту часть после #

+0

Нужна ли вам 'tweet_classified.txt' быть переносимый между java и R, как только вы начали манипулировать им в R? В частности, как только вы 'write.table()' вам нужно прочитать эти данные обратно в другой стек или вы будете работать с ним только в R впредь? –

+0

Почему у вас есть 'sep =" \ n "' в 'write.table()'? Это помещает новую строку в файл между каждым столбцом в файле data.frame, который вы пишете. – devmacrile

+0

Я бы манипулировал данными на Java, а обратно читал их с помощью R – Tunarock

ответ

0

Хорошо, я решил проблему с заменой read.table на gsub("\"","'",readLines(con)). Когда я пишу в файл я собираюсь использовать quote=T

вот mycode:

file_list <- list.files() 

for (file in file_list){ 
    con <- file(file) 

    if (!exists("dataset")){ 
     dataset <- data.frame(gsub("\"","'",readLines(con)),stringsAsFactors = F) 
    } 

    if (exists("dataset")){ 
     temp_dataset <- data.frame(gsub("\"","'",readLines(con)),stringsAsFactors = F) 
     dataset<-rbind(dataset, temp_dataset) 
     rm(temp_dataset) 


    } 
    close.connection(con) 
} 

unique_ds <- unique.data.frame(dataset) 
random_ds <- unique_ds[sample(nrow(unique_ds)),] 
write.table(data.frame(random_ds, stringsAsFactors = F),file="unclassified.txt",col.names = F, row.names = F, quote = T) 

Затем в фазе считывания:

dataset <- read.csv(file="unclassified.txt", header=FALSE, stringsAsFactors = FALSE,quote="\"")