我试图转换的数据应该是一个日期,但是格式化为mmddyyyy,没有用破折号或斜线分隔。为了处理R中的日期,我想将其格式化为mm-dd-yyyy或mm / dd / yyyy。
我想我可能需要使用grep()
,但我不确定如何使用它来重新格式化mmddyyyy格式的所有日期。
答案 0 :(得分:3)
查看lubridate
mdy
功能
require(lubridate)
a <- "10281994"
mdy(a)
给你
[1] "1994-10-28 UTC"
课程"POSIXct" "POSIXt"
的所以R中的日期时间(感谢Joshua Ulrich的更正)
您可以使用as.Date(mdy(a))
= 1994-10-28
获取类Date
的对象。
ymd
内也有dmy
和lubridate
等突变。
答案 1 :(得分:3)
已更新:使用@Richard Scriven的>>> html = urlopen("http://en.wikipedia.org" + articleUrl).read()
和更简单的colClasses
建议进行了改进
以下是两种类似的方法,对于我来说,从包含as.Date()
格式日期的csv到将其识别为R作为日期对象。
首先使用一个简单的文件tv.csv:
mmddyyyy
一旦进入R,
Series,FirstAir
Quantico,09272015
Muppets,09222015
> t = read.csv('tv.csv', colClasses = 'character')
导入为名为tv.csv
t
选项会将所有数据视为colClasses = 'character')
数据类型(而不是character
,Factor
类型)检查其初始结构:
int
> str(t)
'data.frame': 2 obs. of 2 variables:
$ Series : chr "Quantico" "Muppets"
$ FirstAir: chr "09272015" "09222015"
然后可以轻松地将chr
或字符串转换为日期:
chr
> t$FirstAir = as.Date(t$FirstAir, "%m%d%Y")
执行字符串到日期转换as.Date()
指定如何解释%m%d%Y
中的输入。这些格式代码,至少在Linux上,可以通过运行t$FirstAir
找到,它会在$ man date
程序上显示手册,其中有一个格式代码列表。例如,它显示date
如果由于某种原因您不希望对所有字符进行全面导入转换,例如具有许多变量的文件并且希望保留R的自动类型识别但仅仅“修复”一个日期变量,请遵循此方法
一旦进入R,
%m month (01..12)
> t = read.csv('tv.csv')
导入为名为tv.csv
检查其初始结构:
t
> str(t)
'data.frame': 2 obs. of 2 variables:
$ Series : Factor w/ 2 levels "Muppets","Quantico": 2 1
$ FirstAir: int 9272015 9222015
>
变量R导入FirstAir
为09272015
意味着整数,并且从前导零填充中删除,09中的0很重要后来为日期转换但R没有导入它。所以我们需要解决这个问题。这可以在一个命令中完成,但为了清楚起见,我将其分为两个步骤。首先,
int
> t$FirstAir = sprintf("%08d", t$FirstAir)
是格式化功能sprintf
表示使用零填充0
表示确保8个字符,因为mmddyyyy总共8个字符8
用于输入是一个数字,当前是,回忆d
输出声称str()
是t$FirstAir
意味着整数int
是我们设置并用作输入的变量检查结果:
t$FirstAir
> str(t$FirstAir)
chr [1:2] "09272015" "09222015"
转换为int
类型,例如chr
成为9272015
现在它是一个字符串或"09272015"
类型,我们可以转换,与方法1相同。
chr
我们做最后的检查:
> t$FirstAir = as.Date(strptime(t$FirstAir, "%m%d%Y"))
在这两种情况下,文本文件中的原始值现已成功转换为R日期对象。