Как удалить текст в данных, где должны быть цифры

#r #dataframe #data-structures #stata

#r #dataframe #структуры данных #stata

Вопрос:

У меня есть следующая числовая переменная в Stata:

 * Example generated by -dataex-. To install: ssc install dataex
clear
input long r_3srhlt
3
3
2
2
4
1
1
3
3
4
end
label values r_3srhlt r_3srhlt
label def r_3srhlt 1 ".", modify
label def r_3srhlt 2 "2.very ...", modify
label def r_3srhlt 3 "3.good", modify
label def r_3srhlt 4 "5.poor", modify
  

Я хотел бы сохранить только число, а не текст.

Например, я хочу 3, 3, 2, 2, 5, . , . , 3, 3, 5 без «хорошо», «очень хорошо», «плохо» и т.д. Мои данные изначально были файлом Stata, который я read использовал Haven в R. После выполнения некоторых манипуляций с файлом я импортировал их обратно в Stata.

Как я могу этого добиться?

Ответ №1:

У вас есть числовая переменная, которую сначала нужно преобразовать в строку:

 decode r_3srhlt, generate(r_3srhlt_string)
  

Затем вы можете получить все числа за один раз, используя real() функцию и простое регулярное выражение:

 generate wanted = real(ustrregexs(0)) if ustrregexm(r_3srhlt_string, "[0-9]*")

list, separator(0) abbreviate(15)

      --------------------------------------- 
     |   r_3srhlt   r_3srhlt_string   wanted |
     |---------------------------------------|
  1. |     3.good            3.good        3 |
  2. |     3.good            3.good        3 |
  3. | 2.very ...        2.very ...        2 |
  4. | 2.very ...        2.very ...        2 |
  5. |     5.poor            5.poor        5 |
  6. |          .                 .        . |
  7. |          .                 .        . |
  8. |     3.good            3.good        3 |
  9. |     3.good            3.good        3 |
 10. |     5.poor            5.poor        5 |
      ---------------------------------------