【问题标题】:How to import a CSV file without any delimiter into R? [duplicate]如何将没有任何分隔符的 CSV 文件导入 R? [复制]
【发布时间】:2018-06-24 03:05:09
【问题描述】:

我正在尝试将 csv 文件导入到 R 中,其中行的格式如下:

012002001   14.852DL 0000000034630100304660  
012002001   84.031GG 0000001049180100304660     
012002001   84.033DO 0000001297780100304660     
012002001   84.042GG 0000000780000100304660  

很遗憾,空格与字段不对应。字段如下所述。

Field Data Element                          Positions   Length

1   GU Code - State                         1-2         2
    GU Code - Type                          3           1
    GU Code - County                        4-6         3
    GU Code - Place                         7-9         3
    GU Code - Split                         10-12       3

2   Program ID Code                         13-18       6

3   Object Code                             19-20       2

4   Funding Sign                            21          1

5   Funding Amount                          22-33       12

6   FIPS Code - State                       34-35       2
    FIPS Code - County                      36-38       3
    FIPS Code - Place                       39-43       5
    Pass-Through Flag                       44          1

7   Agency Code                             45-48       4

如何以正确表示变量的方式将此文件导入 R?

谢谢!

【问题讨论】:

  • 或者,在 Excel 中以固定宽度打开文件,设置与字段边界对应的边界,然后保存为 CSV,您可以读取所有字段。只要您的文件不太长,这是一种快速、肮脏且有效的处理方式。
  • 你需要read.fwf

标签: r csv import


【解决方案1】:

这不是 CSV 文件。 CSV 是一个“逗号分隔值”文件。您正在处理的是固定宽度的文件格式。请参阅此处提供的答案:Read fixed width text file

library(readr)

x <- read_fwf(
  file="http://www.cpc.ncep.noaa.gov/data/indices/wksst8110.for",   
  skip=4,
  fwf_widths(c(12, 7, 4, 9, 4, 9, 4, 9, 4)))

【讨论】:

    【解决方案2】:

    或者,这是在基础 R 中执行此操作的另一种方法。为每个变量定义起始位置:

    test <- c("012002001   14.852DL 0000000034630100304660  ")
    start.pos <- c(1,3,4,7,10,13,19,21,22,34,36,39,44,45)
    end.pos <- lead(start.pos)-1
    z <- 0
    

    为每个start.pos 取子字符串:

    for (i in 1:length(start.pos)) { 
        z[i] <- substr(test,start.pos[i],end.pos[i])
    }
    

    现在你所有的变量都在一个列表中z

    > z
     [1] "01"           "2"            "002"          "001"          "   "          "14.852"      
     [7] "DL"           " "            "000000003463" "01"           "003"          "04660"       
    [13] " "            NA 
    
    > z[3]
    [1] "002" 
    

    【讨论】:

      猜你喜欢
      • 2013-08-13
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-24
      相关资源
      最近更新 更多