导入多空格分隔文件

时间:2017-08-18 07:59:33

标签: r import

美好的一天,

我试图将数据从文本文件导入到R.正确格式化的数据没有问题,但是当分隔符是双/三空格时该怎么办?

例如,我有以下文本格式的数据

Var1    Var2    var3
30000   Sedan   Model 2014
30000   CHEVROLET   Corvette Stingray
....

在此处,而不是\ t(制表符)分隔,它是三个空格()分隔。列中的数据也可能包含单个空格。

如何让R直接接受?

我已尝试 read.table ,但分隔符标识符(sep ="")似乎不接受多个字符,并且不支持正则表达式。 (据我所知。)似乎有效的方法是将数据作为分隔符分区读取,并在数据帧中将其拆分,但这很愚蠢。

2 个答案:

答案 0 :(得分:3)

您可以使用tidyr::separate将数据拆分为三个空格。

df <- read.table(text = "Var1    Var2    var3
30000   Sedan   Model 2014
30000   CHEVROLET   Corvette Stingray", sep = "%", skip = 1)

tidyr::separate(df, V1, c("Var1", "Var2", "Var3"), sep = "\\s{3}", )

 Var1      Var2              Var3
1 30000     Sedan        Model 2014
2 30000 CHEVROLET Corvette Stingray

答案 1 :(得分:2)

确切的问题是您的列分隔符(2个或更多空格)和列值(单个空格)中的分隔符是重叠的。

要正确阅读,请将两者分开。

2个或更多空格的正则表达式为\s{2,}

使用此正则表达式使用,将列分隔符转换为gsub

直接通过read.csv

阅读转换后的文字
>rawText="Var1    Var2    var3
30000   Sedan   Model 2014
30000   CHEVROLET   Corvette Stingray"

>cleanedText=gsub("\\s{2,}",",",rawText)

>df<-read.table(text=cleanedText)

> df
   Var1      Var2              var3
1 30000     Sedan        Model 2014
2 30000 CHEVROLET Corvette Stingray