Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中,如何将字符格式的日期转换为数字,然后轻松计算两个日期之间的差值_R_String_Date - Fatal编程技术网

在R中,如何将字符格式的日期转换为数字,然后轻松计算两个日期之间的差值

在R中,如何将字符格式的日期转换为数字,然后轻松计算两个日期之间的差值,r,string,date,R,String,Date,所以我想把“2010年10月”和“2010年11月”转换成一个数字格式,因此如果我取这两者的差,我得到的结果是:1 我尝试使用as.date函数,但它似乎只适用于完整格式:月-日-年。您可以尝试格式化原始日期字符串,并将每个字符串视为该月的第一天 dates <- c("October 2010", "November 2010") # extract the first three letters for the month, and the last 4 digits for the

所以我想把“2010年10月”和“2010年11月”转换成一个数字格式,因此如果我取这两者的差,我得到的结果是:1


我尝试使用as.date函数,但它似乎只适用于完整格式:月-日-年。

您可以尝试格式化原始日期字符串,并将每个字符串视为该月的第一天

dates <- c("October 2010", "November 2010")
# extract the first three letters for the month, and the last 4 digits for the year
dates.new <- paste0(substr(dates, 1, 3), "-01-", substr(dates, nchar(dates)-3, nchar(dates)))
> dates.new
[1] "Oct-01-2010" "Nov-01-2010"

# convert to POSIXct
dates.posix <- as.POSIXct(dates.new, format="%B-%d-%y")

diff <- dates.posix[2] - dates.posix[1]
> diff
Time difference of 31 days

日期在您的问题中,您希望计算月数而不是天数的差异。您可以将
month-year
字符向量映射到一个月数,从数据集中的第一个月开始,到数据集中的最后一个月结束,从第1个月开始。那么,计算月数的差异就很简单了

或者,为了能够操作日期时间对象,您必须创建完整日期,方法是在所有日期之前引入01,例如“2010年11月1日”,然后计算日期之间的差异。这是下面答案的主要部分

操作日期时间对象 lubridate软件包可以计算两个日期之间的差异。它处理非琐碎的问题,如2月29日。如果您的系统上未安装:

install.packages("lubridate")
然后

要阅读完整的月份名称,请查看中的格式详细信息


我尝试使用命令:as.Date(as.yearmon(x)),但它默认为我提供了日期,我如何只保留月份和年份?
library(lubridate)
ymd("20160301")-ymd("20160228")
# Time difference of 2 days
ymd("20150301")-ymd("20150228")
# Time difference of 1 days
d <- parse_date_time("November 01 2010", "Bdy") - parse_date_time("October 01 2010", "Bdy")
d
# Time difference of 31 days
class(d)
# [1] "difftime"
as.numeric(d, units="days")
# [1] 31
as.numeric(d, units="weeks")
# [1] 4.428571