【问题标题】:Categorizing data using date variable in R使用 R 中的日期变量对数据进行分类
【发布时间】:2020-07-31 15:28:26
【问题描述】:

我在使用数据集中的日期变量创建 6 个月时间段的类别时遇到问题。我想为 2017-1-1 和 2020-6-30 之间的年份创建这些时间段类别。每年的时间段类别为 2017 年 1 月 1 日至 2017 年 6 月 30 日,以及 2017 年 7 月 1 日至 2017 年 12 月 31 日至 2020 年 6 月 30 日。 我使用了以下两种类型的代码来创建日期类别,但我收到了类似的错误:

#CODE1
#checking for date class
myData <- str(myData)
myData #date in factor class
#convert to date class
date_class <- as.Date(myData$date, format = "%m/%d/%Y")
myData$date_class <- as.Date(myData$date, format = "%m/%d/%Y")
myData
#creating timeperiod category 1
date_cat <- NA
myData$date_cat[which(myData$date_class >= "2017-1-1" & myData$date_class < "2017-7-1")] <- 1

#CODE2
#converting to date format
myData$date <- strptime(myData$date,format="%m/%d/%Y")
myData$date <- as.POSIXct(myData$date)
myData
#creating timeperiod category 1
date_cat <- NA
myData$date_cat[which(myData$date >= "2017-1-1" & myData$date < "2017-7-1")] <- 1

对于这两个代码,我都遇到了类似的错误

$&lt;-.data.frame(*tmp*, date_cat, value = numeric(0)) 中的错误:
替换有0行,数据有1123

请帮助我了解我哪里出错了。

谢谢, 普里亚

【问题讨论】:

  • 您的截止日期需要使用 as.Date() 指定为日期,并且应该有两位数的月份和日期(as.Date(2017-01-01) 不是 2017-1-1

标签: r date categories


【解决方案1】:

这是一个函数 (to.interval),它返回时间间隔 {0, 1, 2, 3, ...},给定事件日期、索引日期和间隔宽度的参数。在函数中包含错误检查可能是一个好主意,因此,例如,如果事件日期早于锚定日期,它会返回 NA。

df <- data.frame(event.date=as.Date(c("2017-01-01", "2017-08-01", "2018-04-30")))

to.interval <- function(anchor.date, future.date, interval.days){
  round(as.integer(future.date - anchor.date) / interval.days, 0)} 

df$interval <- to.interval(as.Date('2017-01-01'), 
                          df$event.date, 180 )

df

输出

  event.date interval
1 2017-01-01        0
2 2017-08-01        1
3 2018-04-30        3

【讨论】:

    猜你喜欢
    • 2023-02-03
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    相关资源
    最近更新 更多