R读取具有不相等列

时间:2017-11-24 03:59:50

标签: r csv readr

我有一个.csv数据集,用“,”分隔,有大约5,000行和“5”列。

但是,对于某些列,内容也包含“,”,例如:

  

2660,11-01-2016,70.75,05-06-2013,我,,,

     

4080,26-02-2016,59.36,d

因此,当我尝试用read_delim()阅读时,它会抛出warnings,但结果应该没问题,例如:

  

警告:7解析失败。

     

行#A tibble:5 x 5 col row col预期实际文件预期实际1 309 5列8列'data / my_data.csv'文件2 523 5列7列'data / my_data.csv'row 3 588 5第8列'data / my_data.csv'col 4 1661 5列9列'data / my_data.csv'预期5 1877 5列7列'data / my_data.csv'

我有什么方法可以解决这个问题吗?

我想我可以使用read_Lines()并逐个处理它,然后将它们变成数据框。

你还有其他方法来处理这种情况吗?

1 个答案:

答案 0 :(得分:0)

1)read.table with fill = TRUE fill=TRUE使用read.table会导致无警告:

Lines <- "2660,11-01-2016,70.75,05-06-2013,I,,,
4080,26-02-2016,59.36,,D"

# replace text = Lines with your filename    
read.table(text = Lines, sep = ",", fill = TRUE)

,并提供:

    V1         V2    V3         V4 V5 V6 V7 V8
1 2660 11-01-2016 70.75 05-06-2013  I NA NA NA
2 4080 26-02-2016 59.36             D NA NA NA

2)用分号替换前4个逗号另一种方法是:

# replace textConnection(Lines) with your filename
L <- readLines(textConnection(Lines))
for(i in 1:4) L <- sub(",", ";", L)
read.table(text = L, sep = ";")

,并提供:

    V1         V2    V3         V4   V5
1 2660 11-01-2016 70.75 05-06-2013 I,,,
2 4080 26-02-2016 59.36               D

3)删除行尾的逗号另一种可能是删除行尾的逗号。 (如果您使用的是Windows,则sed位于Rtools发行版中。)

read.table(pipe("sed -e s/,*$// readtest.csv"), sep = ",")

,并提供:

    V1         V2    V3         V4 V5
1 2660 11-01-2016 70.75 05-06-2013  I
2 4080 26-02-2016 59.36             D

3a)类似于(3)但没有sed

# replace textConnection(Lines) with your filename
L <- readLines(textConnection(Lines))
read.table(text = sub(",*$", "", L), sep = ",")