CSV 文件将字符串值中的逗号视为分隔符,并将数据转移到错误的列中。 R 有没有办法解决这个问题?

问题描述 投票:0回答:1

我有一个很大的 csv 文件,是从在线数据库中提取的,但似乎读起来不太好。看起来它将几列中的逗号视为分隔符,然后将数据解析为新列。

该网站非常旧且有问题,并且已经有一段时间没有更新了。它只允许我将数据导出为 CSV,而且我什至无法从 HTML 代码中删除数据,因为当我切换页面时它会出现故障。所以基本上我坚持我所拥有的。

导入到 R 或 R 中时有办法解决这个问题吗?

CSV 文件规格:

行:26009 列:11
── 列规格────────────────────────────────────────────── ────────────────────────────────── 分隔符:“,”

chr (10):状态、客户、位置、城市、说明、采购订单、日期、总计、已接受、已拒绝

dbl (1):数字

我有 11 列,但有几行数据已转移到第 12、13 甚至第 14 列。

这是数据示例: enter image description here

数据应如下所示: enter image description here

问题最多的列似乎主要是客户和位置(主要是位置)。最后两列(已接受、已拒绝)并不是特别重要,因为该信息已经在“状态”列中。

我仍在集思广益,但我有一个独特的城市列表,因此我考虑使用“城市”列作为数据移动程度的参考 - 至少作为第一遍。例如,在第 9 行中,城市“Ray City”位于“PO”列中,因此之前的所有单元格都应与“Location”列中的字符串以及逗号 ex 连接。 “LDS - 雷城 1、4、10”

此方法可能需要大量修正,因此如果有人有更好的想法,我会洗耳恭听

编辑---------------------- CSV TEXT

Number, Status, Customer, Location, City, Description, PO, Date, Total, Accepted, Rejected
56529,Open,BGIS Canada LP re. Bank of Montreal,BMO Yorktown,Yorktown,Curb Repair,,6/13/2024,322,,,
56528,Accepted,First Bank,Deer Valley,Sechelt,Asphalt Concerns,,6/13/2024,14245,True,,
56527,Open,Loblaws Inc.,RCSS West,Taliha,Tree and Shrub Removal,,6/13/2024,1200,,,
56526,Open,Strata ads232,2210 fakeStreet Drive,Winnipeg,Laneway Wash Out Rehabilitation,,6/13/2024,1000,,,
56525,Open,Loblaws Inc.,RCSS West,Taliha,Irrigation Repairs,,6/13/2024,8999,,,
56524,Accepted,BGIS C/O TD Canada ,TD Bank - Sandy,Sandy,Pot Hole Repairs,,6/13/2024,1335,True,,
56452,Open,JLLRES,LDS - Wansuka, Wildwood,Edmonton,Parking Lot Improvements,,6/5/2024,54321,,,
56427,Open,JLLRES,LDS - Ray City 1, 4, 10,Ray City,Line Painting,,6/3/2024,1234.56,,,
56426,Open,JLLRES,LDS - Ray City 2, 3,Ray City,Line Painting,,6/3/2024,453,,,
56425,Open,JLLRES,LDS - Ray City 5, 6, 8 Cobblestone,Ray City,Line Painting,,6/3/2024,789.1,,,
56424,Open,JLLRES,LDS - Ray City 7, 9, PR,Ray City,Line Painting,,6/3/2024,4567.89,,,
56203,Open,Monty Developments,Broadview Building A, B and C,Port Francis,2024 - 25 Winter Snow and Ice Management,,5/21/2024,33270,,,
56076,Open,JLLRES,LDS - Starburn Bay, Criston, Legacy, McKena,Halifax,2024 Lot Sweep,,5/14/2024,2845.13,,,
55460,Accepted,JLLRES,LDS - Kelvin 1, 2, 3 YSA,Kelvin,Refinish Gym Floor,,3/25/2024,8910.12,True,,
55007,Rejected,RPD,ERBC Office - MHSD, SBC, ISBS, MLA,Port Francis,Litter Pick,,2/21/2024,655.34,False,True,
r excel csv import delimiter
1个回答
0
投票

读取文件的各行,删除最后的逗号,使标题行和数据行的字段数相同,用分号替换逗号,用逗号后跟空格替换分号后跟空格,然后读入 数据(第 2+ 行)和单独的标题(因为标题有逗号后跟空格)。

File <- "jgm13.csv"
DF <- File |>
  readLines() |>
  gsub(",$", "", x = _) |>
  chartr(",", ";", x = _) |>
  gsub("; ", ", ", x = _) |>
  textConnection() |>
  read.table(sep = ";", fill = TRUE, skip = 1, 
    col.names = read.table(File, nrows = 1, sep = ",", strip.white  = TRUE, fill = TRUE))
© www.soinside.com 2019 - 2024. All rights reserved.