Отредактировано, чтобы добавить код:
Я пытаюсь воспроизвести некоторые работы от коллеги, который использует SAS.У нас возникла проблема с импортом в SAS, который преобразует текст (который соответствует логическому) в числовой.
Цель этой работы - определить конкретные записи для передачи, поэтому нам нужно сохранить значения как импортированные изначально (что, я думаю, R сможет сделать).Прямо сейчас мы решаем проблему вручную, потому что это небольшое количество записей, но это не всегда может быть правдой.
Я поймал, что мне нужно скопировать их матричный массив в R.Несколько условий, которые должны быть помечены 1, если они удовлетворяют условию, следующим образом: Код SAS
Мне нужно иметь возможность оценить, есть ли одна из 34 потенциальных строк (иличастичные строки (в SAS двоеточие сокращает значение сравнения до той же длины, что и значение оценки и сравнивает их) в одном из 12 столбцов (например, Q16 означает, что строка должна начинаться только с Q16). Кроме того, любой из 12может иметь значение через него, становится более разреженным в более поздних полях.
Я пытаюсь найти наиболее эффективный и компактный подход, если это возможно.
Я все еще несколько новичок в R для болеесложные проблемы, поэтому я зашел в тупик. Я пробовал несколько подходов с grep и grepl, но ни один из них не принес никаких плодов. Когда я пробовал регулярное выражение, я пытался использовать каждую строкуиндивидуально в ifelse, а затем я также попробовал одну большую строку с оператором "|", но тоже не повезло.Я также попробовал базовый (применить) и dplyr подходы.
Любая помощь приветствуется.
Структура данных: Пример таблицы
Код для данных примера:
structure(list(record = 1:20,
icd1 = c("Q753", "Q620", "Q825", "Q211", "Q828", "Q6532", "Q673", "Q380", "Q5310", "Q040", "Q107", "Q6689", "Q860", "Q753", "Q000", "Q673", "Q860", "Q673", "H9190", "Q381"),
icd2 = c("Q141",NA,NA, "Q170", NA, NA, NA, NA, NA, NA, NA, "Q211", NA, NA, "Q211", "Q673", NA, "115", "Q759", "Q753"),
icd3 = c("Q579", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Q038", "H4657", "Q211"),
icd4 = c("Q656", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Q999", NA, NA),
icd5 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Q5301", NA, NA),
icd6 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Q168", NA, NA),
icd7 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
icd8 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
icd9 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
icd10 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
icd11 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
icd12 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)),
.Names = c("record", "icd1", "icd2", "icd3", "icd4", "icd5", "icd6", "icd7", "icd8", "icd9", "icd10", "icd11", "icd12"),
class = "data.frame", row.names = c(NA, -20L))
Интересующие строки:
case2 <- "^H4703| ^H90*| ^H91*| ^Q000| ^Q001| ^Q002| ^Q01*| ^Q02| ^Q03*|
^Q04*| ^Q05*| ^Q070*| ^Q110| ^Q111| ^Q112| ^Q120| ^Q122| ^Q130| ^Q138|
^Q139| ^Q141| ^Q142| ^Q143| ^Q148| ^Q149| ^Q16*| ^Q65*| ^Q66*| ^Q674|
^Q688| ^Q743| ^Q758| ^Q759| ^Q828"