删除R中的新行

时间:2017-07-31 22:18:27

标签: r csv

我正在尝试将多行放入CSV文件中的一个单元格中。我首先将我的文本文件转换为CSV文件,但是最后一列需要将所有内容都放在一个单元格中,并且它当前被拆分为多个。 CSV文件当前看起来像第一张图片,需要看起来像第二张图片。 Picture1 Picture2

我有以下代码:

  mydata = read.table ("rolled_swiftmessage_test.txt", sep="|", allowEscapes 
  = TRUE, fill = FALSE)

  write.table(mydata, file="rolled_swiftmessage_test.csv",sep=",",col.names= 
  FALSE,row.names= FALSE)

目前它生产Picture_1,我需要它来生成picture_2。我如何解决它?谢谢!

1 个答案:

答案 0 :(得分:0)

在与OP对应并看到她拥有的数据后,这是我更新的答案:

mydata <- read.table ("Test_TextFile.txt", sep="|", allowEscapes = TRUE, fill = FALSE, stringsAsFactors = F)

# Remove rows full of dashes
for(row in 1:nrow(mydata)) {
  if(grepl('^\\-+$', mydata$V1[row])) mydata <- mydata[-row,]
}

empty_rows <- which(grepl('^\\s*$', mydata$V1))
rows_to_squeeze <- split(empty_rows, cumsum(c(1, diff(empty_rows) != 1)))

for(i in length(rows_to_squeeze):1) {
  mydata$V12[rows_to_squeeze[[i]][1] - 1] <- paste(mydata$V12[seq(rows_to_squeeze[[i]][1] - 1, rows_to_squeeze[[i]][length(rows_to_squeeze[[i]])])], collapse = ' ')
  mydata <- mydata[-seq(rows_to_squeeze[[i]][1], rows_to_squeeze[[i]][length(rows_to_squeeze[[i]])]),]
}

write.table(mydata, file="rolled_swiftmessage_test.csv", sep=",", col.names = FALSE, row.names = FALSE)

原始回答

在这里你尝试了这个。它不漂亮,但我认为它有效。基本上,我将文件读作文本行而不是表格,我在线上操作以加入那些属于相同“消息”的文件。单元格,然后我把它们放在一个可以保存为csv文件的漂亮数据框中。如果您需要任何其他调整,请告诉我们:

install.packages('stringr') ## if not installed yet
library(stringr) ## in order to use str_detect and str_split below

mydata <- readLines("rolled_swiftmessage_test.txt")

new_mydata = vector('character')
current <- 1
while(!is.na(mydata[current])) {
  if(str_detect(mydata[current], '\\{')) {
    i <- 1
    while(!str_detect(mydata[current + i], '\\}')) {
      mydata[current] <- paste(mydata[current], mydata[current + i], collapse = ' ')
      i = i + 1
    }
    mydata[current] <- paste(mydata[current], mydata[current + i], collapse = ' ')
    mydata[current] <- gsub('\\| \\| \\| \\|', '', mydata[current])
    new_mydata = c(new_mydata, mydata[current])
    current = current + i + 1  
  } else {
    new_mydata = c(new_mydata, mydata[current])
    current = current + 1
  }
}

new_mydata <- sapply(new_mydata, function(x) str_split(x, '\\|'))
new_mydata <- as.data.frame(t(as.data.frame(new_mydata)))

write.table(new_mydata, file="rolled_swiftmessage_test.csv", sep=",", col.names = FALSE, row.names = FALSE)

打开csv文件后得到的图像(注意我将同一行添加到原始文本文件三次,以便我有更多行进行测试):

enter image description here