Удалить все после строки в столбце фрейма данных с отсутствующими значениями

У меня есть кадр данных, похожий на приведенный ниже отрывок:

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. Строка "_" находится в разных местах переменной
  3. Я также хочу оставить остальную часть фрейма данных такой, какая она есть.

person Konrad    schedule 28.10.2014    source источник
comment
ты пробовал sub("_\\S+","",string,perl=T) ?   -  person Avinash Raj    schedule 28.10.2014
comment
Спасибо, это работает как шарм. Не могли бы вы уточнить это?   -  person Konrad    schedule 28.10.2014
comment
тогда я делаю это как ответ.   -  person Avinash Raj    schedule 28.10.2014


Ответы (1)


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

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

Пояснение:

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

ИЛИ

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

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

Пояснение:

  • _ Соответствует буквальному символу _.
  • .* Соответствует любому символу ноль или более раз.
person Avinash Raj    schedule 28.10.2014
comment
почему не sub("_.+","",string,perl=T) ? - person Cath; 28.10.2014
comment
Почему бы не sub("_.*","",string,perl=T) :-) ? - person Avinash Raj; 28.10.2014
comment
Итак, в случае \S для чего нужен S и каковы другие варианты? - person Konrad; 28.10.2014
comment
\s будет соответствовать любому пробелу space,tab,newline,carriage return. \S будет выполнять обратную операцию. Не считайте \ и S отдельными. - person Avinash Raj; 28.10.2014
comment
perl=T для этого не требуется. - person hwnd; 28.10.2014