【问题标题】:Creating new column with two date conditions from old column R从旧列 R 创建具有两个日期条件的新列
【发布时间】:2018-03-03 12:41:10
【问题描述】:

我有一个看起来像这样的数据框事件

EventCount      Date
3317       2015-01-05
3388       2015-01-12
3467       2015-01-19
3455       2015-01-26
3506       2015-02-02
3561       2015-02-09

我想要的是创建一个新列“EventType”,基于事件发生的周数。 2015-01-12之前发生的属于A类,2015-01-12和2015-02-02之间的属于B类,2015-02-02之后的属于C类。

我尝试的是使用 ifelse 条件来创建一个新列。

  Events$EventType<-ifelse(Events$Date < as.Date('2015-02-02'),"B","C")

这给了我一个新列,它只按两个条件分类,而不是三个。

【问题讨论】:

标签: r


【解决方案1】:

使用剪切

dt['EventType']=cut(dt$Date,breaks=as.Date(c('2000-01-01','2015-01-12','2015-02-02','2111-01-01')),labels = c('A','B','C'))

 dt
  EventCount       Date EventType
1       3317 2015-01-05         A
2       3388 2015-01-12         B
3       3467 2015-01-19         B
4       3455 2015-01-26         B
5       3506 2015-02-02         C
6       3561 2015-02-09         C

根据最新邮件

cut(dat$Date, c(as.Date(c("2015-01-12","2015-02-02")), c(-Inf,Inf)), labels=1:3)

【讨论】:

  • 要绕过使用大日期和小日期,您还可以使用Inf-Infcut(dat$Date, c(as.Date(c("2015-01-12","2015-02-02")), c(-Inf,Inf)), labels=LETTERS[1:3])
  • @thelatemail 非常感谢你,我正在寻找它,拯救我的一天~:)
  • 诀窍是确保你最终得到一个Date 对象,这意味着你不能做更直观的c(-Inf, as.Date(c("2015-01-12","2015-02-02")), Inf),而是c(as.Date(c("2015-01-12","2015-02-02")), c(-Inf,Inf))。后者在打印时将Inf 值显示为NA,但它们实际上存储为Inf
  • @thelatemail 这很有意义!:)我会标记它完成
【解决方案2】:

在实践中(也许很匆忙),您可以通过以下方式在两个命令中执行此操作:

Events$EventType <- ifelse(Events$Date < as.Date("2015-01-12"), "A", "B")
Events$EventType[Events$Date > "2015-02-02"] <- "C" 

数据:

Events <- data.frame(EventCount = c(3317L, 3388L, 3467L, 3455L, 3506L, 3561L),
                     Date       = c("2015-01-05", "2015-01-12", "2015-01-19",
                                    "2015-01-26", "2015-02-02", "2015-02-09"))
Events$Date <- as.Date(Events$Date)

【讨论】:

    【解决方案3】:

    这是我在 sapply 中使用函数的尝试

    setEventType <- function(date){
      if(date < as.Date("2015-01-12")){
        return("A")
      }
      else if(date >= as.Date("2015-02-02")){
          return("C")
      }
      else{
         return("B")
      }
    }
    
    Events$EventType <- sapply(as.Date(Events$Date), setEventType)
    

    输出:

     EventCount       Date EventType
    1       3317 2015-01-05         A
    2       3388 2015-01-12         B
    3       3467 2015-01-19         B
    4       3455 2015-01-26         B
    5       3506 2015-02-02         C
    6       3561 2015-02-09         C
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-25
      • 2021-11-30
      • 1970-01-01
      • 2018-02-11
      • 2018-08-15
      • 2020-08-07
      • 2018-12-05
      • 1970-01-01
      相关资源
      最近更新 更多