R读取具有不相等列的数据集
R read data set which has unequal column
我有一个 .csv 数据集,由“,”分隔,大约有 5,000 行和“5”列。
但是,对于某些列,内容中还包含“,”,例如:
2660,11-01-2016,70.75,05-06-2013,I,,,
4080,26-02-2016,59.36,,D
因此,当我尝试用 read_delim()
读取它时,它会抛出 warnings
,但结果应该没问题,例如:
Warning: 7 parsing failures.
row # A tibble: 5 x 5 col row col expected actual file expected actual 1 309 5 columns 8 columns 'data/my_data.csv' file 2 523 5 columns 7 columns 'data/my_data.csv' row 3 588 5 columns 8 columns 'data/my_data.csv' col 4 1661 5 columns 9 columns 'data/my_data.csv' expected 5 1877 5 columns 7 columns 'data/my_data.csv'
我有什么办法可以解决这个问题吗?
我想我可以使用 read_Lines()
并一个一个地处理它,然后将它们变成一个数据框。
对于这种情况,您还有其他处理方法吗?
1) read.table with fill=TRUE 使用 fill=TRUE
with 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 = ",")
我有一个 .csv 数据集,由“,”分隔,大约有 5,000 行和“5”列。
但是,对于某些列,内容中还包含“,”,例如:
2660,11-01-2016,70.75,05-06-2013,I,,,
4080,26-02-2016,59.36,,D
因此,当我尝试用 read_delim()
读取它时,它会抛出 warnings
,但结果应该没问题,例如:
Warning: 7 parsing failures.
row # A tibble: 5 x 5 col row col expected actual file expected actual 1 309 5 columns 8 columns 'data/my_data.csv' file 2 523 5 columns 7 columns 'data/my_data.csv' row 3 588 5 columns 8 columns 'data/my_data.csv' col 4 1661 5 columns 9 columns 'data/my_data.csv' expected 5 1877 5 columns 7 columns 'data/my_data.csv'
我有什么办法可以解决这个问题吗?
我想我可以使用 read_Lines()
并一个一个地处理它,然后将它们变成一个数据框。
对于这种情况,您还有其他处理方法吗?
1) read.table with fill=TRUE 使用 fill=TRUE
with 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 = ",")