繁体   English   中英

如何将未知分隔符 csv 文件读入 R

[英]How to read an unknown separator csv file in to R

我在这个网站中有一个保存为csv文件的示例数据。

1.csv是由其他人发送给我的,我无法使用read.csv其正确读入 R。

> dat = read.csv('1.csv')
Warning messages:
1: In read.table(file = file, header = header, sep = sep, quote = quote,  :
  line 1 appears to contain embedded nulls
2: In read.table(file = file, header = header, sep = sep, quote = quote,  :
  line 2 appears to contain embedded nulls
3: In read.table(file = file, header = header, sep = sep, quote = quote,  :
  incomplete final line found by readTableHeader on 'data/hanze/1.csv'

然后我也尝试在read.csv添加sep但也失败了。

dat = read.csv('1.csv', sep = ',')
dat = read.csv('1.csv', sep = '\t')

最后,我使用Microsoft Excel1.csv文件重新保存为一个名为1_test.csv逗号分隔符的新 csv 文件,并且它可以工作。

dat = read('1_test.csv', encoding = 'UTF-8')
head(dat)

  id           station     lon    lat RASTERVALU
1  1              东四 116.417 39.929  0.2406870
2  2              天坛 116.407 39.886  0.0992821
3  3              官园 116.339 39.929  0.1243020
4  4          万寿西宫 116.352 39.878  0.2394120
5  5          奥体中心 116.397 39.982  0.2368810
6  6 农展<e9><U+00A6>? 116.461 39.937  0.2307600

在我的真实情况下,我有数百个像1.csv这样的文件,我不想使用Microsoft Excel将它们重新保存为新的 csv 文件。

我的问题是有没有一种方法可以直接正确地将1.csv读入 R 而无需重新保存它?

这可能会引入不可预见的错误,但它似乎提供了预期的输出:

library(data.table)
library(tidyverse)
test <- fread(file = "~/Downloads/1.csv")
#> Warning in fread(file = "~/Downloads/1.csv"): Detected 1 column names but the
#> data has 140 columns (i.e. invalid file). Added 139 extra default column names
#> at the end.
test_df <- as.data.frame(matrix(unlist(test, use.names = FALSE), ncol = 4, byrow = TRUE))
test_df %>% 
  separate(V1, c("id", "station"), extra = "merge") %>% 
  mutate(station = gsub(pattern = "0", replacement = "", x = station)) %>% 
  rename("lon" = V2,
         "lat" = V3,
         "RASTERVALU" = V4)
#>    id        station     lon    lat RASTERVALU
#> 1   1           东四 116.417 39.929   0.240687
#> 2   2           天坛 116.407 39.886  0.0992821
#> 3   3           官园 116.339 39.929   0.124302
#> 4   4       万寿西宫 116.352 39.878   0.239412
#> 5   5       奥体中心 116.397 39.982   0.236881
#> 6   6         农展馆 116.461 39.937    0.23076
#> 7   7           万柳 116.287 39.987   0.201353
#> 8   8       北部新区 116.174  40.09   0.170883
#> 9   9         植物园 116.207 40.002   0.210636
#> 10 10       丰台花园 116.279 39.863   0.225224
#> 11 11           云岗 116.146 39.824    0.23084
#> 12 12           古城 116.184 39.914    0.17514
#> 13 13       房山良乡 116.136 39.742   0.243377
#> 14 14     大兴黄村镇 116.404 39.718   0.295714
#> 15 15     亦庄开发区 116.506 39.795   0.315679
#> 16 16       通州新城 116.663 39.886   0.255555
#> 17 17       顺义新城 116.655 40.127   0.212804
#> 18 18         昌平镇  116.23 40.217   0.160067
#> 19 19   门头沟龙泉镇 116.106 39.937    0.17251
#> 20 20         平谷镇   117.1 40.143   0.275457
#> 21 21         怀柔镇 116.628 40.328   0.177003
#> 22 22         密云镇 116.832  40.37   0.253771
#> 23 23         延庆镇 115.972 40.453   0.219738
#> 24 24       昌平定陵  116.22 40.292    0.15908
#> 25 25   京西北八达岭 115.988 40.365      -9999
#> 26 26 京东北密云水库 116.911 40.499   0.173666
#> 27 27     京东东高村  117.12   40.1   0.276452
#> 28 28   京东南永乐店 116.783 39.712   0.278231
#> 29 29       京南榆垡   116.3  39.52   0.533654
#> 30 30   京西南琉璃河     116  39.58   0.449057
#> 31 31     前门东大街 116.395 39.899   0.236876
#> 32 32   永定门内大街 116.394 39.876   0.148231
#> 33 33   西直门北大街 116.349 39.954   0.234347
#> 34 34     南三环西路 116.368 39.856   0.177043
#> 35 35     东四环北路 116.483 39.939   0.253252

reprex 包( v2.0.0 ) 于 2021 年 7 月 26 日创建

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM