Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.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 润滑mdy函数_R_Lubridate - Fatal编程技术网

R 润滑mdy函数

R 润滑mdy函数,r,lubridate,R,Lubridate,我正在尝试转换以下内容,但其中一个日期未成功[1]。“4/2/10”变为“0010-04-02” 有没有办法纠正这个问题 谢谢, 维韦克 data我认为这是因为mdy()函数更喜欢将年份与%Y(实际年份)匹配,而不是%Y(年份的两位缩写,默认为19XX或20XX) 不过,还有一个解决办法。我查看了lubridate::parse_date_time(?parse_date_time)的帮助文件,在帮助文件的底部附近,有一个示例,用于添加一个参数,该参数更喜欢与%y格式匹配,而不是与%y格式匹配。

我正在尝试转换以下内容,但其中一个日期未成功[1]。“4/2/10”变为“0010-04-02”

有没有办法纠正这个问题

谢谢, 维韦克


data我认为这是因为
mdy()
函数更喜欢将年份与
%Y
(实际年份)匹配,而不是
%Y
(年份的两位缩写,默认为19XX或20XX)

不过,还有一个解决办法。我查看了
lubridate::parse_date_time
?parse_date_time
)的帮助文件,在帮助文件的底部附近,有一个示例,用于添加一个参数,该参数更喜欢与
%y
格式匹配,而不是与
%y
格式匹配。帮助文件中的相关代码位:

## ** how to use `select_formats` argument **
## By default %Y has precedence:
parse_date_time(c("27-09-13", "27-09-2013"), "dmy")
## [1] "13-09-27 UTC"   "2013-09-27 UTC"

## to give priority to %y format, define your own select_format function:

my_select <-   function(trained){
   n_fmts <- nchar(gsub("[^%]", "", names(trained))) + grepl("%y", names(trained))*1.5
   names(trained[ which.max(n_fmts) ])
}

parse_date_time(c("27-09-13", "27-09-2013"), "dmy", select_formats = my_select)
## '[1] "2013-09-27 UTC" "2013-09-27 UTC"

我认为这是因为
mdy()
函数更喜欢将年份与
%Y
(实际年份)匹配,而不是与
%Y
(年份的两位数缩写,默认为19XX或20XX)匹配

不过,还有一个解决办法。我查看了
lubridate::parse_date_time
?parse_date_time
)的帮助文件,在帮助文件的底部附近,有一个示例,用于添加一个参数,该参数更喜欢与
%y
格式匹配,而不是与
%y
格式匹配。帮助文件中的相关代码位:

## ** how to use `select_formats` argument **
## By default %Y has precedence:
parse_date_time(c("27-09-13", "27-09-2013"), "dmy")
## [1] "13-09-27 UTC"   "2013-09-27 UTC"

## to give priority to %y format, define your own select_format function:

my_select <-   function(trained){
   n_fmts <- nchar(gsub("[^%]", "", names(trained))) + grepl("%y", names(trained))*1.5
   names(trained[ which.max(n_fmts) ])
}

parse_date_time(c("27-09-13", "27-09-2013"), "dmy", select_formats = my_select)
## '[1] "2013-09-27 UTC" "2013-09-27 UTC"

这只是第一个值,还是您需要一个更通用的解决方案来处理更大的数据集?这里有很多关于将2位数年份转换为4位数年份的有用信息:如果您单独解析它,它工作得很好;只是格式的多样性使得解析日期时间的格式猜测太广了。假设它不是一个巨大的向量,只需循环它就可以了:
do.call(c,lappy(data$initialDiagnose,lubridate::parse_date\u time,orders=c('mdy','dmy'))
它只是第一个值吗,或者你需要一个更通用的解决方案来处理更大的数据集吗?这里有很多关于将2位数年份转换为4位数年份的有用信息:如果你单独解析它,它工作得很好;只是格式的多样性使得解析日期时间的格式猜测太广了。假设它不是一个巨大的向量,只需循环它就可以了:
do.call(c,lapply(data$initialDiagnose,lubridate::parse_date\u time,orders=c('mdy','dmy'))
这很完美。谢谢,这太完美了。非常感谢。
# Define a select function that prefers %y over %Y. This is copied 
# directly from the help files
my_select <-   function(trained){
  n_fmts <- nchar(gsub("[^%]", "", names(trained))) + grepl("%y", names(trained))*1.5
  names(trained[ which.max(n_fmts) ])
}

# Parse as mdy dates
mdy <- parse_date_time(data$initialDiagnose, "mdy", select_formats = my_select)
# [1] "2010-04-02 UTC" NA               "2005-09-22 UTC" "2010-04-21 UTC" NA              
# [6] "2009-09-01 UTC" "2005-03-28 UTC" "2005-04-01 UTC" "2005-04-01 UTC" "2010-09-17 UTC"
#[11] "2010-03-01 UTC"
   initialDiagnose
1       2010-04-02
2       2009-01-14
3       2005-09-22
4       2010-04-21
5       2010-01-28
6       2009-09-01
7       2005-03-28
8       2005-04-01
9       2005-04-01
10      2010-09-17
11      2010-03-01