我有一个大的csv文件,其中随机行以以下字符串结尾:/ \ r /。此后的下一行应该是前一行的延续,而是将其视为新行。应该用什么功能来解决这个问题?到目前为止,我已经设法通过将csv作为字符串向量导入到R来找到损坏的行,即我使用了分隔符,这在文件中没有出现,所以R将整行读作一列。现在我想将以上面提到的字符串结尾的行和在它之后出现的行粘贴在一起。
此处示例:
"CLSL;2017-01-09;PA930082402;23;10986450"
"CLNA;2016-09-05 /\r/"
";650963783;1;60010670"
我希望它看起来像这样:
"CLSL;2017-01-09;PA930082402;23;10986450"
"CLNA;2016-09-05;650963783;1;60010670"
答案 0 :(得分:2)
希望这有帮助!
#read file
txt <- readLines("test.csv")
#find row index of junk value
idx <- which(grepl(" /\\\\r/", txt))
#append next immediate row with the row having junk value
txt[idx] <- paste0(txt[idx], txt[idx+1])
txt <- txt[-(idx+1)]
#remove junk value
txt <- gsub(" /\\\\r/", "", txt)
输出为:
> txt
[1] "CLSL;2017-01-09;PA930082402;23;10986450" "CLNA;2016-09-05;650963783;1;60010670"
示例数据:
test.csv
包含
CLSL;2017-01-09;PA930082402;23;10986450
CLNA;2016-09-05 /\r/
;650963783;1;60010670
答案 1 :(得分:1)
这里适当的解决方案可能会在您的csv源自的任何数据库中为值添加引号,但除此之外,这是将您拥有的字符向量组合到data.frame中的一种方法。
tt <- c("CLSL;2017-01-09;PA930082402;23;10986450",
"CLNA;2016-09-05 /\r/", ";650963783;1;60010670",
"CLSL;2017-01-09;PA930082402;23;10986450",
"CLNA;2016-09-05 /\r/", ";650963783;1;60010670")
tt <- sub(" /\r/\n", "", paste0(tt, "\n"))
tt <- paste(tt, collapse="")
read.csv2(text=tt, header=FALSE)
# V1 V2 V3 V4 V5
# 1 CLSL 2017-01-09 PA930082402 23 10986450
# 2 CLNA 2016-09-05 650963783 1 60010670
# 3 CLSL 2017-01-09 PA930082402 23 10986450
# 4 CLNA 2016-09-05 650963783 1 60010670