Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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_Date - Fatal编程技术网

在R中将字符串转换为日期

在R中将字符串转换为日期,r,date,R,Date,我试图转换的数据应该是日期,但是它的格式为mmddyyyy,没有用破折号或斜杠分隔。为了处理R中的日期,我希望将其格式化为mm dd yyyy或mm/dd/yyyy 我想我可能需要使用grep(),但我不确定如何使用它来重新格式化mmddyyyy格式的所有日期。看看lubridatemdy函数 require(lubridate) a <- "10281994" mdy(a) 类的“POSIXct”“POSIXt”所以在R中有一个日期时间(感谢Joshua Ulrich的更正) 您可以使

我试图转换的数据应该是日期,但是它的格式为mmddyyyy,没有用破折号或斜杠分隔。为了处理R中的日期,我希望将其格式化为mm dd yyyy或mm/dd/yyyy


我想我可能需要使用
grep()
,但我不确定如何使用它来重新格式化mmddyyyy格式的所有日期。

看看
lubridate
mdy
函数

require(lubridate)
a <- "10281994"
mdy(a)
类的“POSIXct”“POSIXt”所以在R中有一个日期时间(感谢Joshua Ulrich的更正)

您可以使用
as.Date(mdy(a))
=
1994-10-28
获取类
Date
的对象


lubridate
中也存在类似于
ymd
dmy
的突变。

更新了:改进了's
colClasses
和更简单的
as.Date()

这里有两种对我有用的类似方法,从包含
mmddyyyy
格式日期的csv到让R将其识别为日期对象

首先从一个简单的文件tv.csv开始:

Series,FirstAir
Quantico,09272015
Muppets,09222015
方法1:全部作为字符串 一旦进入R

> t = read.csv('tv.csv', colClasses = 'character')
> t = read.csv('tv.csv')
  • 导入
    tv.csv
    作为名为
    t
  • colClasses='character')
    选项会将所有数据视为
    字符
    数据类型(而不是
    因子
    int
    类型)
检查其初始结构:

> str(t)
'data.frame':   2 obs. of  2 variables:
 $ Series  : chr  "Quantico" "Muppets"
 $ FirstAir: chr  "09272015" "09222015"
> str(t)
'data.frame':   2 obs. of  2 variables:
 $ Series  : Factor w/ 2 levels "Muppets","Quantico": 2 1
 $ FirstAir: int  9272015 9222015
>
  • R已将所有字符作为字符串导入,此处表示为type
    chr
然后,将
chr
或字符串轻松转换为日期:

> t$FirstAir = as.Date(t$FirstAir, "%m%d%Y")
  • as.Date()
    执行字符串到日期的转换
  • %m%d%Y
    指定如何解释t$FirstAir
中的输入。这些格式代码(至少在Linux上)可以通过运行
$man date
找到,这将打开
date
程序的手册,其中有一个格式代码列表。例如,它说
%m月(01..12)
方法2:导入然后只确定日期 如果出于某种原因,您不希望对所有字符进行全面导入转换,例如,一个包含许多变量的文件,并且希望保留R的自动类型识别功能,而只是“修复”一个日期变量,请遵循此方法

一旦进入R

> t = read.csv('tv.csv', colClasses = 'character')
> t = read.csv('tv.csv')
  • 导入
    tv.csv
    作为名为
    t
检查其初始结构:

> str(t)
'data.frame':   2 obs. of  2 variables:
 $ Series  : chr  "Quantico" "Muppets"
 $ FirstAir: chr  "09272015" "09222015"
> str(t)
'data.frame':   2 obs. of  2 variables:
 $ Series  : Factor w/ 2 levels "Muppets","Quantico": 2 1
 $ FirstAir: int  9272015 9222015
>
  • R尽力猜测每个变量的变量类型
  • 正如您所看到的,一个直接的问题是,对于
    FirstAir
    变量R已导入
    09272015
    int
    表示整数,并且删除了前导的零填充,09中的0在以后的日期转换中很重要,而R导入时没有。所以我们需要解决这个问题
这可以在一个命令中完成,但为了清楚起见,我将其分为两个步骤。首先,

> t$FirstAir = sprintf("%08d", t$FirstAir)
  • sprintf
    是一个格式化函数
  • 0
    表示用零填充
  • 8
    表示确保8个字符,因为mmddyyy总共是8个字符
  • d
    当输入是一个数字时使用,当前它是,调用
    str()
    输出声明
    t$FirstAir
    是一个
    int
    表示整数
  • t$FirstAir
    是我们设置并用作输入的变量
检查结果:

> str(t$FirstAir)
 chr [1:2] "09272015" "09222015"
  • 它成功地从
    int
    转换为
    chr
    类型,例如
    9272015
    变成
    “09272015”
现在我们可以转换为字符串或
chr
类型,与方法1相同

> t$FirstAir = as.Date(strptime(t$FirstAir, "%m%d%Y"))
结果 我们进行最后检查:

> str(t$FirstAir)
 Date[1:2], format: "2015-09-27" "2015-09-22"

在这两种情况下,文本文件中的原始值现在已成功转换为R日期对象。

as.date(“12252015”,format=“%m%d%Y”)
date
分类对象是R中的日期。
POSIXct
对象是日期时间,而不是日期。您也可以使用
t