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