在 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))
我有一列数据,其中包含以下类型的日期和数字条目:
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))