Здесь вы можете использовать tstrsplit()
после преобразования в формат даты
# Recreate your data
x <- data.frame("Subject" = c("2-Mar", "5-Jun", "6-Feb"))
# Change the format of your Subject coumn
x[, "Subject"] <- format(as.POSIXct(x[, "Subject"], format = "%d-%b"), "%m %d")
# Split into the two strings
library(data.table) # to get tstrsplit() function
x[, c("Actor", "Recipient")] <- tstrsplit(x[, "Subject"], " ")
# Convert to numeric
x[, "Actor"] <- as.numeric(x[, "Actor"])
x[, "Recipient"] <- as.numeric(x[, "Recipient"])
Возвращает
> x
Subject Actor Recipient
1 02 03 3 2
2 05 06 6 5
3 06 02 2 6
И если вы хотите, чтобы Тема в исходном формате
# Return Subject to original format
x[, "Subject"] <- format(as.POSIXct(x[, "Subject"], format = "%m %d"), "%d-%b")
Предоставление
> x
Subject Actor Recipient
1 02-Mar 3 2
2 05-Jun 6 5
3 06-Feb 2 6
Объяснено:
Ваш вектор / переменная "Тема" был импортирован как символьный тип atomi c vector (атомы c векторы - это одномерная структура одного или нескольких элементов, где все элементы должны быть одинакового типа ). Решение состояло в том, чтобы преобразовать то, что R будет интерпретировать как дату, используя функцию as.POSIXct(..., format = "...")
, где format сообщает R, как форматируется строка ( см. Коды здесь ). Затем я завернул это в функцию format()
, сказав, что нужно изменить формат на цифру c месяцев. Затем он был разделен на два столбца с помощью функции tstrsplit()
, но R интерпретировал их как данные символьного типа, поэтому я преобразовал их с помощью функции as.numeric()
в данные double -типа.