【问题标题】:import dat file into R将 dat 文件导入 R
【发布时间】:2012-07-24 17:33:10
【问题描述】:

为这个问题的简单性提前道歉。我正在尝试使用以下代码将 .dat 文件从网站导入 R:

www = "http://www.nilu.no/projects/ccc/onlinedata/ozone/CZ03_2009.dat"
data <- read.delim(www, header = TRUE, sep="\t") 

我想访问 data.frame 的 Value 部分,但是,我不确定 data.frame 的尺寸,如果我输入 ncol(data) 它会返回 1,我期望它是 3。如何访问此 data.frame 的“第三”列?

【问题讨论】:

    标签: r import


    【解决方案1】:

    dat 文件在实际数据之前有一些额外的信息行。使用skip 参数跳过它们:

    read.table("http://www.nilu.no/projects/ccc/onlinedata/ozone/CZ03_2009.dat", 
               header=TRUE, skip=3)
    

    如果您不熟悉数据集,一个简单的检查方法是首先使用readLines 检查几行,如下所示:

    readLines("http://www.nilu.no/projects/ccc/onlinedata/ozone/CZ03_2009.dat", 
              n=10)
    # [1] "Ozone data from CZ03 2009"   "Local time: GMT + 0"        
    # [3] ""                            "Date        Hour      Value"
    # [5] "01.01.2009 00:00       34.3" "01.01.2009 01:00       31.9"
    # [7] "01.01.2009 02:00       29.9" "01.01.2009 03:00       28.5"
    # [9] "01.01.2009 04:00       32.9" "01.01.2009 05:00       20.5"
    

    在这里,我们可以看到实际数据从[4]开始,所以我们知道跳过前三行。

    更新

    如果您真的只想要Value 列,您可以这样做:

    as.vector(
        read.table("http://www.nilu.no/projects/ccc/onlinedata/ozone/CZ03_2009.dat",
                   header=TRUE, skip=3)$Value)
    

    同样,readLines 可帮助我们确定将要导入的列的实际名称。

    但与读取整个数据集并稍后提取相比,我认为这样做并没有太多优势。

    【讨论】:

    • 谢谢。所以,从这里我将如何定义一个名为“Value”的变量。 data$Value 不起作用,并且 ncol(data) 等于 1?我输入 as.vector(data$Value) 并且 R 返回 NULL。
    • 请再看示例。您可能仍然拥有sep="\t",它将把所有内容放在一个单独的列中data.frame;您尝试读取的实际文件由 space 分隔,而不是由 tabs 分隔。因此,如果您想要完整的数据集,请使用我答案上部的解决方案。如果您只想将 Values 列作为单独的向量,请使用更新后的部分。我希望这是有道理的。
    • 谢谢我错过了解决方案的那一部分。效果很好。
    • 为什么你的skip等于3?
    • @MonaJalal,请参阅答案中的第一句话。
    猜你喜欢
    • 2015-11-27
    • 2019-01-11
    • 2020-08-20
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    • 2018-10-22
    • 2017-09-07
    • 1970-01-01
    相关资源
    最近更新 更多