如何使用R显示日期范围

时间:2015-12-23 03:06:28

标签: r r-markdown

我真的很擅长使用R。我试图用数据集做一些基本的东西。我有一个只有一列(date)的数据集,其中包含参与者在调查中填写的日期:

11/11/2015
11/11/2015
11/11/2015
11/11/2015
11/11/2015
11/11/2015
11/11/2015
11/11/2015
27/11/2015
27/11/2015
etc (there are about 180 more responses)

到目前为止,我已经完成了:

NUdates <- nrow(unique(date)) 

这表明根据回复有12个唯一日期

接下来我要做的只是返回最早和最晚的日期,以便我有对象:

Emonth # (this would be the earliest month that a participant filled out the survey)
Lmonth # (this would be the latest month that a participant filled out he survey)
Year   # (this would be the year the surveys were filled out)

然后使用降价我可以说:

  

参与者在r (NUdates) r (Emonth)r (Lmonth)之间的r (year)天完成了调查。

2 个答案:

答案 0 :(得分:1)

txt <- "11/11/2015
11/11/2015
11/11/2015
11/11/2015
11/11/2015
11/11/2015
11/11/2015
11/11/2015
27/11/2015
27/11/2015"

> dates <- as.Date(scan(text=txt, what=""), format="%d/%m/%Y")

Read 10 items
> dates
 [1] "2015-11-11" "2015-11-11" "2015-11-11" "2015-11-11" "2015-11-11"
 [6] "2015-11-11" "2015-11-11" "2015-11-11" "2015-11-27" "2015-11-27"
)

要获得Date类对象之间的区别,可以使用-运算符。

>  max(dates) - min(dates) 
Time difference of 16 days

要删除无关材料,您可以使用unclass

dput(max(dates) - min(dates))
structure(0, units = "days", class = "difftime")

unclass(max(dates) - min(dates))
[1] 16
attr(,"units")
[1] "days"

答案 1 :(得分:0)

这个答案假设您在序列中找到了您的唯一日期。 后续步骤 -
1)确保您的日期按排序顺序排列。你可以通过 -

这样做
table <- table[order(table$Date),]

表格是您唯一日期的数据框。

2)使用包timeDate
函数timeFirstDayInMonth()和timeLastDayInMonth()是你需要的。

start_date <- timeFirstDayInMonth(table$Date[1])                #First Date Of First Occuring Month
end_date <- timeLastDayInMonth(table$Date[nrow(table)-1])       #Last Date Of Last Occuring Month

3)你终于可以找到Emonth和Lmonth

Emonth <- format(start_date, format = "%B")        #Full Month name

Lmonth <- format(end_date, format = "%m")        #Decimal Month