以正确的方式读写data.frames

时间:2015-10-01 18:12:50

标签: java r twitter read.table write.table

我的问题非常简单,我有一个文件,其中每行包含大量的推文,不包含引号。在阅读我创建的文件"数据集"后,将其随机化并消除重复:

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 2246 行。但是,当我打开刚刚创建的文件时,我看到超过5000行

第一个问题:我无法理解 的问题。它可能在write.table或上面的代码吗?

[考虑到在原始文件的每条推文中,我已经删除了换行符和回车符;下面的Java代码]

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

第二个问题:假设每行添加一个新变量(例如推文的类别),当我在R中读回它时,就像csv文件这种格式是合适的: &#34;我的推文&#34;,使用下面的代码输入

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

特别是如何在Java / R中管理引号内的引号问题?

感谢

重要我只考虑这样一个事实:很明显,Twitter数据包含#字符,所以我会问另一个问题:是否可以使用\ n进行sobitute主题标签?或者只是将其视为评论,然后抛弃#

之后的部分

1 个答案:

答案 0 :(得分:0)

好的,我用read.table代替gsub("\"","'",readLines(con))来解决问题。 当我写信给文件时,我将使用quote=T

这是我的代码:

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="\"")