在R中将字符串转换为日期
我试图转换的数据应该是日期,但是它的格式为mmddyyyy,没有用破折号或斜杠分隔。为了处理R中的日期,我希望将其格式化为mm dd yyyy或mm/dd/yyyy在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的更正) 您可以使
我想我可能需要使用
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
的突变。更新了:改进了'scolClasses
和更简单的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尽力猜测每个变量的变量类型
- 正如您所看到的,一个直接的问题是,对于
变量R已导入FirstAir
为09272015
表示整数,并且删除了前导的零填充,09中的0在以后的日期转换中很重要,而R导入时没有。所以我们需要解决这个问题int
> t$FirstAir = sprintf("%08d", t$FirstAir)
是一个格式化函数sprintf
表示用零填充0
表示确保8个字符,因为mmddyyy总共是8个字符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