【问题标题】:Creating a Data Frame based on day of week from a Data Frame containing several months of data从包含几个月数据的数据框中创建基于星期几的数据框
【发布时间】:2012-01-24 19:09:21
【问题描述】:

我刚从 R 开始,希望能得到一些帮助。我在一个文件中有一组数据如下:

20111001|37|9|9
20111002|48|6|11
...
20111031|42|6|8


我已使用以下内容加载文件:

    myClasses <- c( "character", "numeric", "numeric", "numeric" )
    df <- read.table( "inputfile", FALSE, "|", colClasses=myClasses )
    names( df ) <- c( "datestamp", "cnt1", "cnt2", "cnt3" )
    df$datestamp <- as.Date( df$datestamp, "%Y%m%d" )


如何创建另一个仅包含某个工作日的数据的数据框(即,包含与 df 相同的所有信息但仅适用于 Fridays 的数据框)?

【问题讨论】:

    标签: r date


    【解决方案1】:

    如果你做一次(只做一天),你可以使用

    fridays <- df[format(df$datestamp, "%A") == "Friday",]
    

    您的示例数据在星期五没有任何日期,因此这是一个空数据框。

    如果您要对更多天进行子集化,则创建一周中的某一天列,然后对其进行子集化可能会更容易。

    df$day.of.week <- format(df$datestamp, "%A")
    fridays <- df[df$day.of.week == "Friday",]
    

    进一步推测,如果您打算对每个数据子集执行相同的操作,请查看数据的拆分-应用-组合方法(与 applyplyr 包相关的各种函数,其中其他)。

    【讨论】:

    • 谢谢。这帮助我完成了我想做的事情。
    【解决方案2】:

    这是使用lubridate 的另一种方法。

    # READ DATA
    dat <- read.table(text = 
    "20111001|37|9|9
     20111002|48|6|11
     20111031|42|6|8",
     sep = "|", header = F, 
    )
    
    # FORMAT DATE COLUMN
    library(lubridate)
    dat <- transform(dat, V1 = ymd(V1))
    
    # CREATE SUBSET
    subset(dat, wday(V1, label = T) == 'Sat')
    

    【讨论】:

      猜你喜欢
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 1970-01-01
      • 2017-08-20
      • 2022-12-11
      • 2019-05-11
      • 1970-01-01
      相关资源
      最近更新 更多