【问题标题】:In R, How to retain the original format of dates when I load in a dataframe with a sequence of dates as its header?在 R 中,当我加载以日期序列作为标题的数据帧时,如何保留日期的原始格式?
【发布时间】:2020-06-16 23:34:58
【问题描述】:

我加载的数据框DF 有一个日期序列作为其标题。然而,"2020-02-01" 变成了X2020.02.01 等等。是否可以保留日期的格式并用它们命名列?以及如何获取原始格式的日期列表,即["2020-02-01", ... , "2020-04-21"]

DF = read.csv("https://raw.githubusercontent.com/PawinData/UC/SFBA/Targets.csv")

【问题讨论】:

    标签: r dataframe date header


    【解决方案1】:

    R 不喜欢真正是数据的列名。此外,列名始终转换为character,因此它们不会是真正的Date 对象。无论哪种方式,如果您阅读?read.csv,您将看到check.names= 参数。

    check.names:合乎逻辑。如果 'TRUE' 则在 检查数据框以确保它们在语法上 有效的变量名。如有必要,它们会被调整(通过 'make.names') 以便它们存在,并且还要确保存在 没有重复。

    read.csv(text = "2020-02-02,2020-02-03\n1,2")
    #   X2020.02.02 X2020.02.03
    # 1           1           2
    read.csv(text = "2020-02-02,2020-02-03\n1,2", check.names = FALSE)
    #   2020-02-02 2020-02-03
    # 1          1          2
    
    DF = read.csv("https://raw.githubusercontent.com/PawinData/UC/SFBA/Targets.csv", check.names = FALSE)
    DF[1:3,1:5]
    #                2020-02-01 2020-02-02 2020-02-03 2020-02-04
    # 1      Alameda          0          0          0          0
    # 2 Contra Costa          0          0          0          0
    # 3        Marin          0          0          0          0
    
    

    尽管意识到您需要在某些子集上更进一步。

    DF$2020-04-21
    # Error: unexpected numeric constant in "DF$2020"
    # x
    DF$"2020-04-21"
    # [1] 28.719660 36.410103  3.961824 36.634331 17.015503 19.567608 12.449088
    # [8]  2.419292 20.666366
    DF$`2020-04-21`
    # [1] 28.719660 36.410103  3.961824 36.634331 17.015503 19.567608 12.449088
    # [8]  2.419292 20.666366
    

    姓名:

    colnames(DF) # or just names(DF)
    #  [1] ""           "2020-02-01" "2020-02-02" "2020-02-03" "2020-02-04"
    #  [6] "2020-02-05" "2020-02-06" "2020-02-07" "2020-02-08" "2020-02-09"
    # [11] "2020-02-10" "2020-02-11" "2020-02-12" "2020-02-13" "2020-02-14"
    # ...truncated...
    

    顺便说一句,您的第一列似乎有一个空名称,如上图和此处所示:

    head(DF[[1]])
    # [1] "Alameda"       "Contra Costa"  "Marin"         "Napa"         
    # [5] "San Francisco" "San Mateo"    
    

    您可以通过两种方式处理:

    ### original read method:
    DF = read.csv("https://raw.githubusercontent.com/PawinData/UC/SFBA/Targets.csv", check.names = FALSE)
    names(DF)[1]
    # [1] ""
    names(DF)[1] <- "counties"
    DF[1:3, 1:5]
    #       counties 2020-02-01 2020-02-02 2020-02-03 2020-02-04
    # 1      Alameda          0          0          0          0
    # 2 Contra Costa          0          0          0          0
    # 3        Marin          0          0          0          0
    

    或者通过使它们成为 R-proper 的“行名”:

    DF = read.csv("https://raw.githubusercontent.com/PawinData/UC/SFBA/Targets.csv", 
                  check.names = FALSE, row.names = 1)
    DF[1:3, 1:5]
    #              2020-02-01 2020-02-02 2020-02-03 2020-02-04 2020-02-05
    # Alameda               0          0          0          0          0
    # Contra Costa          0          0          0          0          0
    # Marin                 0          0          0          0          0
    

    诚然,许多包(即 tidyverse)不使用或保留行名。一个常见的建议是将行名转换为适当的列,如第一个示例所示。

    【讨论】:

      猜你喜欢
      • 2020-10-15
      • 2020-03-12
      • 2021-11-22
      • 2021-08-30
      • 2014-09-13
      • 2021-06-02
      • 1970-01-01
      • 2017-07-03
      • 1970-01-01
      相关资源
      最近更新 更多