将字符串转换为R

时间:2015-09-29 22:05:02

标签: r string date grep format

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

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

2 个答案:

答案 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内也有dmylubridate等突变。

答案 1 :(得分:3)

已更新:使用@Richard Scriven>>> html = urlopen("http://en.wikipedia.org" + articleUrl).read() 和更简单的colClasses建议进行了改进

以下是两种类似的方法,对于我来说,从包含as.Date()格式日期的csv到将其识别为R作为日期对象。

首先使用一个简单的文件tv.csv:

mmddyyyy

方法1:全部为字符串

一旦进入R,

Series,FirstAir
Quantico,09272015
Muppets,09222015
  • > t = read.csv('tv.csv', colClasses = 'character') 导入为名为tv.csv
  • 的数据框
  • t选项会将所有数据视为colClasses = 'character')数据类型(而不是characterFactor类型)

检查其初始结构:

int
  • R已将所有字符串导入,此处显示为> 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

方法2:导入然后仅修复日期

如果由于某种原因您不希望对所有字符进行全面导入转换,例如具有许多变量的文件并且希望保留R的自动类型识别但仅仅“修复”一个日期变量,请遵循此方法

一旦进入R,

%m     month (01..12)
  • > t = read.csv('tv.csv') 导入为名为tv.csv
  • 的数据框

检查其初始结构:

t
  • R尽力猜测每个变量的变量类型
  • 正如您所看到的,当前问题是> str(t) 'data.frame': 2 obs. of 2 variables: $ Series : Factor w/ 2 levels "Muppets","Quantico": 2 1 $ FirstAir: int 9272015 9222015 > 变量R导入FirstAir09272015意味着整数,并且从前导零填充中删除,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日期对象。