【问题标题】:Problems with importing FORTRAN data in R在 R 中导入 FORTRAN 数据的问题
【发布时间】:2015-02-13 10:58:02
【问题描述】:

我有这个.DAT file 显然来自 FORTRAN。我试过了:

read.fortran("ANDRICH.DAT",header = TRUE, format="8F1.0")

但不工作。我收到以下错误消息:

Error in read.table(file = FILE, header = header, sep = sep, 
row.names = row.names,  : 
more columns than column names

有什么想法吗? 提前致谢!

数据文件如下:

$ 8
$ HIDEOUS
$ LIFESACRED
$ INEFFECTIV
$ DONTBELIEV
$ WISHNOTNEC
$ MUSTHAVEIT
$ DETERRENT
$ CRIMDESERV
$ (8f1.0)
01100000
01100000
01100000
01100000

【问题讨论】:

    标签: r fortran


    【解决方案1】:

    根据一些谷歌搜索:

    "这些数据的 FORTRAN 输入格式为 (8F1.0) 其中“F1.0”表示 变量存储在一列中并且没有隐式 小数点。这种格式重复了 8 次,没有任何空格 数据集中有 8 个变量。”

    Source

    跳过第一行,直到找到实际数据,并使用文件8F1.0中指定的格式:

    output <- read.fortran("ANDRICH.DAT", format="8F1.0", skip=10)
    

    您可以使用readLines 获取名称:

    names(output) <- gsub("\\$ ","",readLines("ANDRICH.DAT",n=9)[-1])
    

    结果:

    #  HIDEOUS LIFESACRED INEFFECTIV DONTBELIEV WISHNOTNEC MUSTHAVEIT DETERRENT CRIMDESERV
    #1       0          1          1          0          0          0         0          0
    #2       0          1          1          0          0          0         0          0
    #3       0          1          1          0          0          0         0          0
    #4       0          1          1          0          0          0         0          0
    #etc
    

    【讨论】:

      【解决方案2】:

      这是文件的顶部:

      $ 8
      $ HIDEOUS
      $ LIFESACRED
      $ INEFFECTIV
      $ DONTBELIEV
      $ WISHNOTNEC
      $ MUSTHAVEIT
      $ DETERRENT
      $ CRIMDESERV
      $ (8f1.0)
      01100000
      01100000
      01100000
      01100000
      11100000
      11100000
      11100000
      11100000
      11100000
      11100000
      11100000
      11100000
      11100000
      

      我不知道为什么它会是一个“FORTRAN 文件”。看起来是一个带有由美元符号分隔的标题的文件,第一个条目是字段的数量,然后接下来的 N 行是名称,然后是一个固定宽度的文件。

      如果您跳过前 10 行,然后使用 read.fwf with width=1,您应该能够成功。

      【讨论】:

      • 我不确定它是否是一个 fortran 文件。但是我对 readLines 命令做了同样的事情,但我仍然不知道如何读取表格。另外,我认为您是对的,第一个条目显示了字段的数量,但我不明白此表中最后一个字段(8f1.0)的外观。
      • 我们可以推测0's 和1's 在fortran 中存储为浮点数,8f1.0 格式描述符将它们紧凑地写入,没有小数点或空格。
      猜你喜欢
      • 1970-01-01
      • 2019-04-29
      • 2017-02-22
      • 1970-01-01
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 2012-05-30
      • 1970-01-01
      相关资源
      最近更新 更多