Непонятно, что означает «дата различна в каждой ячейке», но если это означает, что значение даты отличается, и это всегда седьмое поле, то сработает любой из (1) или (2).Если это означает, что он состоит из 8 последовательных цифр в любом месте текста или 8 последовательных цифр, заключенных в любом месте в тексте _, см. (3).
1) Предполагая ввод DF
, показанный в воспроизводимой форме в примечании, в конце используйте read.table
, чтобы прочитать year
, выделите седьмое поле и затем преобразовайте его в класс Date
.Пакеты не используются.
transform(read.table(text = DF$year, sep = "_")[7],
year = as.Date(as.character(V7), "%Y%m%d"), V7 = NULL)
## year
## 1 1987-05-17
2) Другая альтернатива - separate
в тидыре.Требуется 0.8.2 или более поздняя версия.
library(dplyr)
library(tidyr)
DF %>%
separate(year, c(rep(NA, 6), "year"), extra = "drop") %>%
mutate(year = as.Date(as.character(year), "%Y%m%d"))
## year
## 1 1987-05-17
3) Предполагается, что дата является единственной последовательностью из 8 цифр в поле year
, используйте ее или, если мы ее знаемокружен символом _, тогда вместо него можно использовать регулярное выражение "_(\\d{8})_"
.
library(gsubfn)
transform(DF,
year = do.call("c", strapply(DF$year, "\\d{8}", ~ as.Date(x, "%Y%m%d"))))
## year
## 1 1987-05-17
Примечание
DF <- data.frame(year = "1_1_1_1_LT05_127024_19870517_00005ff8aac6b6bf60bc",
stringsAsFactors = FALSE)