我有一个.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()
并逐个处理它,然后将它们变成数据框。
你还有其他方法来处理这种情况吗?
答案 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 = ",")