Я хотел бы разделить строки на что-нибудь не цифру. В этом конкретном случае строки были датами и временем, считываемыми из внешнего файла .csv
и в настоящее время не в формате as.POSIXct
.regex, чтобы разделить на что-нибудь не цифру
В идеале я хотел бы разделить строки с помощью regex
, но если есть более простой способ, чтобы преобразовать их в шесть столбцов чисел, используя функцию date
/time
, которая будет представлять интерес.
Мне уже удалось создать regex
, который разбивает строки на шесть столбцов, но этот regex
не является общим.
Вот данные:
my.data <- read.csv(text = '
Date_Time
18/05/2011 07:32:40
19/05/2011 13:26:02
19/05/2011 13:32:47
19/05/2011 13:45:24
19/05/2011 14:57:27
19/05/2011 15:03:18
', header=TRUE, stringsAsFactors = FALSE, na.strings = 'NA', strip.white = TRUE)
Вот regex
утверждение, что разделяет строки на шесть колонок:
my.date.time <- data.frame(do.call(rbind, strsplit(my.data$Date_Time,"[/|:|[:space:]]+")))
Данное заявление не является общим. Вот неудачная попытка сделать в regex
генерала, указав раскол на что-либо, что не является цифра:
data.frame(do.call(rbind, strsplit(my.data$Date_Time,"[^\\d]+")))
После того как я разделить строки на шесть колонок мне еще нужно то, что кажется чрезмерным количеством заявлений для преобразования столбцы в числовой формат:
colnames(my.date.time) <- c('my.day', 'my.month', 'my.year', 'my.hour', 'my.minute', 'my.second')
revised.data <- data.frame(my.data, my.date.time, stringsAsFactors = FALSE)
revised.data$my.day <- as.numeric(as.character(revised.data$my.day))
revised.data$my.month <- as.numeric(as.character(revised.data$my.month))
revised.data$my.year <- as.numeric(as.character(revised.data$my.year))
revised.data$my.hour <- as.numeric(as.character(revised.data$my.hour))
revised.data$my.minute <- as.numeric(as.character(revised.data$my.minute))
revised.data$my.second <- as.numeric(as.character(revised.data$my.second))
revised.data
str(revised.data)
Спасибо за любую помощь в обобщая выше regex
(или упрощение процедуры с использованием date
/time
функции). Функция apply
, вероятно, может устранить большинство операторов as.numeric(as.character)
, хотя это относительно небольшая проблема.
[^ \\ d] не работает? – drmariod
@drmariod No. Он просто возвращает пустое пространство. –
'apply (my.data, 1, strsplit," [^ [: digit:]] ")', после чего это всего лишь вопрос о перечне и rbind результаты, которые я думаю. – SabDeM