Управлять условным оператором с помощью регулярных выражений в R - PullRequest
0 голосов
/ 13 апреля 2010

Я пытаюсь манипулировать условной строкой, выведенной из SAS, в правильном формате для условного оператора в R. Вот пример условной строки, выведенной из SAS:

. < var1_a<=80 and var2_a>50.8

Я написал функцию, которая обрабатывает некоторые необходимые преобразования:

conditonalsub <- function(x) {
subnew <- gsub("<=", " <= ", x)
subnew <- gsub(">=", " >= ", subnew)
subnew <- gsub(">", " > ", subnew)
subnew <- gsub("and", "&", subnew)
subnew <- gsub("\\.\\s", "NA ", subnew)
return(subnew)

, которая производит следующую строку:

NA < var1_a <= 80 & var2_a > 50.8

Я использую эти условные операторы для поднабора наблюдений фрейма данных. Поэтому в этом примере я хочу, чтобы R выбрал все наблюдения со значениями var1_a, которые либо отсутствуют, либо меньше или равны 80, И имеют var2_a больше 50,8. Как я могу изменить вышеуказанную функцию, чтобы получить условный оператор, который может принимать пропущенные значения, такие как часть var1_a условного оператора выше? Я предполагаю, что формат нового условного оператора будет выглядеть примерно так?

(var1_a == NA | var1_a <= 80) & (var2_a > 50.8) 

1 Ответ

0 голосов
/ 13 апреля 2010

Это неверный ответ, но я думаю, что эта проблема сложнее, чем вы представляете.

  1. Отсутствующие значения действуют несколько странно в SAS. Для сравнения они эквивалентны отрицательной бесконечности. Таким образом, пропущенное значение меньше любого не пропущенного числа, но не меньше пропущенного числа. Таким образом, оператор . < var1_a<=80 написан таким образом, чтобы избегал выбора пропущенных значений и не включал их. Это также означает, что настоящая проблема связана с неточными взглядами, такими как a<10, которые оцениваются в TRUE в SAS, если a отсутствует, но не в R.

  2. С другой стороны, синтаксис 2 < a < 4 для получения значений между 2 и 4 разрешен в SAS, но не в R, поэтому вам придется найти способ обнаружить это и все его вариации.

  3. В зависимости от того, какой общий уровень вы хотите получить, вы должны перекодировать альтернативные способы, которыми SAS также может обозначать сравнения (EQ, NE, GEQ и т. Д.).

Поэтому, если ваш набор логических операторов SAS имеет очень ограниченный синтаксис, у вас будет много проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...