拥有这些数据:
dates
1990-02-02 01:00:00
1990-02-02 02:00:00
1990-02-03 01:00:00
1990-02-03 02:00:00
1990-02-04 01:00:00
1990-02-04 02:00:00
我可以创建一个列,其中每一行都有这样的天数吗?
number dates
1 1990-02-02 01:00:00
1 1990-02-02 02:00:00
2 1990-02-03 01:00:00
2 1990-02-03 02:00:00
3 1990-02-04 01:00:00
3 1990-02-04 02:00:00
答案 0 :(得分:2)
排名功能应该按照您的需要进行,但请查阅相关文档,因为我没有一个易于重现的例子
temp <- data.frame(dates = c('1990-02-02 01:00:00',
'1990-02-02 02:00:00',
'1990-02-03 01:00:00',
'1990-02-03 02:00:00',
'1990-02-04 01:00:00',
'1990-02-04 02:00:00',
'1990-02-04 03:00:00'))
temp$datesonly<-as.Date(temp$dates)
temp2<-data.frame(dates=unique(temp$datesonly),ranks=rank(unique(temp$datesonly),ties.method="first"))
temp<-merge(temp,temp2,by.x="datesonly",by.y="dates")
答案 1 :(得分:2)
此解决方案假定日期按时间顺序列出(或至少按日排序),并且日期实际上格式化为日期时间对象。
temp <- data.frame(dates = c('1990-02-02 01:00:00',
'1990-02-02 02:00:00',
'1990-02-03 01:00:00',
'1990-02-03 02:00:00',
'1990-02-04 01:00:00',
'1990-02-04 02:00:00',
'1990-02-04 03:00:00'))
temp$dates <- as.POSIXct(temp$dates, tz = "GMT")
x <- table(as.Date(temp$dates))
temp$number <- rep(seq_along(x), x)
temp
# dates number
# 1 1990-02-02 01:00:00 1
# 2 1990-02-02 02:00:00 1
# 3 1990-02-03 01:00:00 2
# 4 1990-02-03 02:00:00 2
# 5 1990-02-04 01:00:00 3
# 6 1990-02-04 02:00:00 3
# 7 1990-02-04 03:00:00 3
基本思路是将时间消除(使用as.Date
)并将每天的频率制成表格。然后,您可以在该输出上使用rep
来创建“数字”变量。
拍打前额并发布更简单的解决方案
在factor
上使用as.Date
。这甚至可以在没有订购数据的data.frame
上工作:
temp <- data.frame(dates = c('1990-02-02 01:00:00',
'1990-02-02 02:00:00',
'1990-02-03 01:00:00',
'1990-02-03 02:00:00',
'1990-02-04 01:00:00',
'1990-02-04 02:00:00',
'1990-02-04 03:00:00'))
temp$dates <- as.POSIXct(temp$dates, tz = "GMT")
within(temp, {
counts <- as.numeric(factor(as.Date(dates)))
})
# dates counts
# 1 1990-02-02 01:00:00 1
# 2 1990-02-02 02:00:00 1
# 3 1990-02-03 01:00:00 2
# 4 1990-02-03 02:00:00 2
# 5 1990-02-04 01:00:00 3
# 6 1990-02-04 02:00:00 3
# 7 1990-02-04 03:00:00 3
答案 2 :(得分:0)
尝试这个...
- library(lubridate)
date <- c("1990-02-02 01:00:00",
"1990-02-02 02:00:00",
"1990-02-03 01:00:00",
"1990-02-03 02:00:00",
"1990-02-04 01:00:00",
"1990-02-04 02:00:00")
number <- day(date)
cbind.data.frame(number,date)