在 R 中修剪和重新格式化日期

Trimming and reformatting dates in R

我有一列数据,其中包含以下类型的日期和数字条目:

16-Jun
21-01A
7-04
Aug-99
5-09

我想通过做两件事将这些都转换成数字。首先,如果数据在破折号之前有一个数字(如前三个示例),我想 trim 从破折号开始的数据。因此条目将显示为 16、21 和 7。

其次,条目以月-日格式编写(例如 Aug-99),我想将其转换为月数,然后 trim。所以这个例子,将日期转换为 8-99 然后 trim 到 8.

我如何在 R 中执行此操作?当我使用 grep、sub 和 match 命令时,如以下答案所示,我得到: [1] 16 21 7 5 8

当我在:[1] 16 21 7 8 5

我们使用 grep 来查找以字母开头的元素的索引。删除从 - 开始到带有 sub 的字符串结尾的子字符串。基于 'i1' 子集 'v2' 并转换为 numeric 而我们 match 以字母开头的那些为 month.abb 并获得月份的索引,连接输出.

i1 <- grepl("^[A-Z]", v1)
v2 <- sub("-.*", "", v1)
c(as.numeric(v2[!i1]), match(v2[i1], month.abb))
#[1] 16 21  7  8

对于新的数据集,我们可以使用ifelse

i1 <- grepl("^[A-Z]", df1$v1)
v2 <- sub("-.*", "", df1$v1)
as.numeric(ifelse(i1, match(v2, month.abb), v2))
#[1] 16 21  7  8  5

数据

v1 <- c('16-Jun','21-01A','7-04','Aug-99') 
df1 <- structure(list(v1 = c("16-Jun", "21-01A", "7-04", "Aug-99", "5-09"
)), .Names = "v1", class = "data.frame", row.names = c(NA, -5L))