2016-04-21 2 views
0

У меня есть вектор, который содержит даты и времени, сохраненные в качестве фактора целого числа, как этотR отделяя целое вектор

«20151201 070104»

и мне нужно, чтобы отделить его в пространстве. Я пробовал:

dtsplit = as.numeric(strsplit(dtimes, " ")) 

но это не работает как его не в формате символов.

Как бы я лучше всего это сделал?

+0

'dtsplit = as.numeric (strsplit (dtimes," «) [[1]])' будет работать. 'strsplit' возвращает список, из которого вы берете первый элемент. –

+2

Ваше название плохо сформулировано. Вы хотите разбить строку на целочисленный вектор. Если у вас уже есть целочисленный вектор, вам это не понадобится! Как вы получили этот вектор? Если вы прочтете его из файла, было бы проще правильно его прочитать. –

+0

У меня это из файла, я перечислил вопрос таким образом, как когда я смотрю на вектор в переменном explorer, он указан как целочисленный тип – Gordon

ответ

0

Вы можете разделить свои промежутки времени, используя strspit, как вы уже узнали. Поскольку ваша строка является числовой прямо сейчас, вам сначала нужно преобразовать ее в char, используя функцию as.character().

Наше решение будет:

dtimes <- "20151201 070104" 
dtsplit = strsplit(as.character(dtimes), " ") 

Если у вас есть таблица, содержащая несколько дат, как тот, который вы публикуемую в ваш комментарий:

df <- structure(list(V1 = structure(c(1L, 2L, 3L, 4L, 4L, 5L), .Label =  c("20151201 070104",  "20151201 070105", "20151201 070119", "20151201 070127", "20151201 070210" ), class = "factor"), V2 = c(160.02, 160.02, 160.01, 160, 160.01,  160.02), V3 = c(2, 2, 1, 1, 1, 2)), .Names = c("V1", "V2", "V3" ), class = "data.frame", row.names = c(NA, -6L)) 

Моя догадка вам нужно дату из каждого столбца , а не время. Вы можете использовать функцию sapply применить strsplit к каждой строке (this question has more information about this):

df$date <- sapply(strsplit(as.character(df$V1), " ")[], "[[", 1) 
df$time <- sapply(strsplit(as.character(df$V1), " ")[], "[[", 2) 

#> df 
#    V1  V2 V3  date time 
#1 20151201 070104 160.02 2 20151201 070104 
#2 20151201 070105 160.02 2 20151201 070105 
#3 20151201 070119 160.01 1 20151201 070119 
#4 20151201 070127 160.00 1 20151201 070127 
#5 20151201 070127 160.01 1 20151201 070127 
#6 20151201 070210 160.02 2 20151201 070210 
+1

Это очень полное спасибо – Gordon