从旧列R创建具有两个日期条件的新列
我有一个数据帧事件,看起来像这样从旧列R创建具有两个日期条件的新列,r,R,我有一个数据帧事件,看起来像这样 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之间发生的
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")
Events$EventType通过使用cut
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)
通过使用cut
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)
在实践中(可能还有匆忙),您可以通过以下两种方式使用两个命令来完成:
Events$EventType <- ifelse(Events$Date < as.Date("2015-01-12"), "A", "B")
Events$EventType[Events$Date > "2015-02-02"] <- "C"
Events$EventType“2015-02-02”]在实践中(可能还有匆忙),您可以通过以下两个命令来完成:
Events$EventType <- ifelse(Events$Date < as.Date("2015-01-12"), "A", "B")
Events$EventType[Events$Date > "2015-02-02"] <- "C"
Events$EventType“2015-02-02”]下面是我使用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)
下面是我使用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)
看一看。答案是你可以使用的。也可以是有用的。看看。答案是你可以使用的。也可能是有帮助的。为了避免使用大日期和小日期,你也可以使用Inf
和-Inf
:cut(dat$Date,c(as.Date(c(“2015-01-12”,“2015-02-02”)),c(-Inf,Inf)),labels=lets[1:3])。
@谢谢你,我一直在找它,拯救我的一天~:)诀窍是确保你最终得到一个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
@最新邮件这很有意义!:)我将标记它以不使用大小日期,您也可以使用Inf
和-Inf
:剪切(dat$Date,c(as.Date)(c(“2015-01-12”),“2015-02-02”)),c(-Inf,Inf)),labels=LETTERS[1:3])
@最近的邮件非常感谢,我一直在寻找它,节省我的时间~:)诀窍是确保你最终得到一个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
。@这很有意义!:)我将标记它完成