2016-03-25 3 views
3

Я пытаюсь извлечь первые несколько символов из столбца в фрейме данных. Мне нужно, чтобы вначале было несколько символов, пока не встретится «,».Что эквивалентно функции LEFT plus FIND в R?

данных:

texts 
12/5/15, 11:49 - thanks, take care 
12/5/15, 11:51 - cool 

Что мне нужно

texts         date 
12/5/15, 11:49 - thanks, take care  12/5/15 
12/10/15, 11:51 - cool     12/10/15 

Я устал, используя это, но это возвращается все без колонн

df$date <- sub(", ", "", df$date, fixed = TRUE) 

and 

df$date <- gsub(".,","", df$texts) 

Excel эквивалентные

=LEFT(A1, FIND(",",A1,1)-1) 
+1

'df $ date <- sub ('(^. *?),. *', '\\ 1', df $ text)' – alistaire

+0

работал благодаря большому количеству !!1 –

ответ

2

Вы можете использовать sub:

sub('(^.*?),.*', '\\1', df$texts) 
# [1] "12/5/15" "12/5/15" 

картина соответствует

  • начало строки ^ с последующим любым символом . повторяется от нуля до времени бесконечность, но как можно *? все снято (...)
  • с последующим запятой ,
  • следует любому символ, неоднократный нуль до бесконечности раза .*

, который будет соответствовать всей линии, и заменяет его

  • захваченных групп \\1.

Другие варианты: substr, strsplit, stringr::str_extract.

Если вы планируете использовать сказал финики, as.Date (или strptime, если вы хотите раз тоже) может фактически вырезать то, что нужно:

as.Date(df$texts, '%m/%d/%y')` # or '%d/%m/%y', if that's the format 
# [1] "2015-12-05" "2015-12-05" 

данных:

df <- structure(list(texts = structure(1:2, .Label = c("12/5/15, 11:49 - thanks, take care", 
       "12/5/15, 11:51 - cool"), class = "factor")), .Names = "texts", 
       class = "data.frame", row.names = c(NA, -2L)) 
+0

Спасибо за объяснение! Заслуженный голос –

0

Вы можете сделать

l <- strsplit (df$date, split = ",") 

разделить текст с помощью комы, а затем

sapply (l, "[", 1) 

сохранить только первую часть.

+0

спасибо за это, хорошее использование sapply –

2

Почему не просто,

sub(',.*', '', df$texts) 
#[1] "12/5/15" "12/5/15" 
+1

Это простой вариант. Плюс один. – akrun

Смежные вопросы