我正在尝试导入列分隔符为“|”的 csv 文件。其中一列的值包含“|”。这会导致错误,并且数据操作系统不会加载超出该特定行的内容。如何克服这个问题。
我尝试过 read.csv() 和 fread() 函数。
1) 如果有引用字符,则可以使用
read.csv
正常读取,但如果没有,我们知道 4 个字段中的第 3 个字段可能包含也可能不包含 |然后创建一个与线条匹配的模式并使用 read.pattern
。我们在最后的注释中生成示例输入。
library(gsubfn)
pat <- "([^|]*)\\|([^|]*)\\|(.*)\\|([^|]*)$"
read.pattern("raj.dat", pattern = pat, header = TRUE, strip.white = TRUE)
给予
A B C D
1 1 2 a|c 3
2 10 20 x 40
2) 如果额外|字符前面和后面紧跟着一个非数字,而对于实际的分隔符来说并非如此,那么每当出现这种模式时,我们就可以替换文件中未出现的字符(此处;),然后正常读取它,然后转换回来。
L <- readLines("raj.dat")
L[-1] <- gsub("(\\D)\\|(\\D)", "\\1;\\2", L[-1])
DF <- read.table(text = L, header = TRUE, sep = "|")
DF[[3]] <- chartr(";", "|", DF[[3]])
示例输入--
Lines <- "A|B|C|D
1|2|a|c|3
10|20|x|40
"
cat(Lines, file = "raj.dat")