将表读入R时,sep =""的例外情况?处理字段内的空白

que*_*ark 6 import r

我需要将一个表导入到由空格分隔的R中.不幸的是,在某些字段中,存在导致R分成新行的空格.有没有办法让这些领域"粘在一起"?

例如,表格如下所示:

V1    V2    V3    V4
Text  More  0.11  (a)kdfs hdfa ag$
Text  More  1.12  a
Text  More  0.21  v
Text  More  1222  (a)sdfs sdfa->g
Text  More  1232  (a)sdfs sdfa->g
Run Code Online (Sandbox Code Playgroud)

但是在R读取它时会变成这个(使用read.delim)

V1    V2    V3    V4
Text  More  0.11  (a)kdfs 
hdfa  ag$
Text  More  1.12  a
Text  More  0.21  v
Text  More  1222  (a)sdfs 
sdfa->g
Text  More  1232  (a)sdfs 
sdfa->g
Run Code Online (Sandbox Code Playgroud)

这些字段都有奇怪的字符,这些字符并非与其他列/行共享.但是,如图所示,空格的两侧没有相同的字符.

在原始文件中,行正确分隔.有办法做以下任何一种吗?

  1. 创建第四列后,停止用空格分隔
  2. 将以某些字符开头/结尾的字段粘贴在一起作为字符串/添加空格所在的非空格字符
  3. 通常,允许例外 sep

如果这是非常天真的话,对R很新.这是我的脚本到目前为止的样子:

strs <- readLines("file")
dat <- read.delim(text = strs, 
            skip = 17, 
            col.names = c("V1", "V2", "V3", "V4"),
            sep = " ", header = F) 
Run Code Online (Sandbox Code Playgroud)

有什么我可以添加到其中任何一个read.delimreadLines之间来解决这个问题吗?因为有需要被切除的绒毛(因此skip)我不能使用read.table(如果我错了,请纠正我).

空间周围的一些字符是共享的,所以我愿意使用一种更繁琐的方法将其他字符放在例如's'和's'之间的空格中.gsub如果没有更简单的方法,这是可能的吗?

非常感谢!

编辑:洞察力的闪光,是否有可能使第四列成为一个新表(当然不是用空格分隔),然后用其他东西替换该表中的所有空格?如何在第三列之后"断开"第四列/列?

G. *_*eck 4

1)试试这个:

for(i in 1:3) strs <- sub(" +", ",", strs)
read.csv(text = strs)
Run Code Online (Sandbox Code Playgroud)

最后一行的结果是:

    V1   V2      V3               V4
1 Text More    0.11 (a)kdfs hdfa ag$
2 Text More    1.12                a
3 Text More    0.21                v
4 Text More 1222.00  (a)sdfs sdfa->g
5 Text More 1232.00  (a)sdfs sdfa->g
Run Code Online (Sandbox Code Playgroud)

2)这是第二种解决方案:

strs.comma <- sub("^(\\S+) +(\\S+) +(\\S+) +", "\\1,\\2,\\3,", strs)
read.csv(text = strs.comma)
Run Code Online (Sandbox Code Playgroud)