2014-10-28 2 views
2

у меня есть кадр данных, напоминающий экстракт ниже:Удалить все после строки в колонке кадра данных с пропущенными значениями

Observation Identifier Value 
Obs001  ABC_2001  54 
Obs002  ABC_2002  -2 
Obs003     1 
Obs004     1 
Obs005  Def_2001/05 

Я хотел бы превратить этот кадр данных в кадр данных, где части строк после «_» знак будет удален: как показано на рисунке ниже:

Observation Identifier_NoTime Value 
Obs001  ABC     54 
Obs002  ABC     -2 
Obs003       1 
Obs004       1 
Obs005  Def 

Я пытался экспериментировать с strsplit, gsub и sub, как описано здесь, но не может заставить тех, благодарит за работу. Я должен объяснить тот факт, что:

  1. Колонка имеет недостающие значения, и я хочу, чтобы оставить их там, где они
  2. String «_» находится в разных местах, в переменной
  3. Я также хочу оставить остальную часть данных кадра, как это
+2

Вы попробовали 'sub (" _ \\ S + "," ", string, perl = T)'? –

+0

Спасибо, это работает как шарм. Не могли бы вы рассказать об этом? – Konrad

+0

, тогда я делаю это как ответ. –

ответ

8

Вы можете попробовать ниже sub команду, чтобы удалить все не пробельные символы из _ символа.

sub("_\\S*", "", string) 

Объяснение:

  • _ Спички буквального _ символ.
  • \S* Соответствует нулю или нескольким символам без пробела.

ИЛИ

Это удалит все символы из _ символа,

sub("_.*", "", string) 

Объяснение:

  • _ Спички буквального _ символ.
  • .* Соответствует любому символу ноль или более раз.
+0

Почему не 'sub (" _. + "," ", String, perl = T)'? – Cath

+1

Почему бы не 'sub (" _. * "," ", String, perl = T)' :-)? –

+0

правый! так почему бы не ? ;-) – Cath