我有一列数据,其中包含以下类型的日期和数字条目:
16-Jun
21-01A
7-04
Aug-99
5-09
我想通过做两件事将这些全部转换为数字。首先,如果数据在破折号之前有一个数字(如前三个示例中所示),我想从破折号开始修剪数据。因此条目将显示为16,21和7。
其次,如果条目以月 - 日格式(例如Aug-99)写入,我想将其转换为月份的数字,然后修剪它。所以这个例子就是将日期转换为8-99然后修剪为8。
我怎样才能在R中这样做?当我使用grep,sub和match命令时,如下面的答案,我得到: [1] 16 21 7 5 8
当我之后:[1] 16 21 7 8 5
答案 0 :(得分:1)
我们使用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))