У меня есть большой фрейм данных (строки ~ 4,5 м), каждая строка соответствует отдельному поступлению в больницу.Найти индекс столбца элемента для каждой строки фрейма данных
В пределах допуска допускаются до 20 кодов диагностики в столбцах № 7 до № 26. Кроме того, у меня есть поле, назначенное как «основной диагноз». Это было мое предположение, что «главный диагноз» соответствовал первому из 20 диагностических кодов. Это неверно - иногда это 1-й, другие 2-й, 3-й и т. Д. Меня интересует это распределение.
ID MainDiagCode Diag_1 Diag_2 Diag_3 ...
Patient1 J123 J123 R343 S753
Patient2 G456 F119 E159 G456
Patient3 T789 L292 T789 W474
Я хотел бы добавить столбец к моей кадр данных, который говорит мне, какие из 20 диагностических кодов соответствует к «основной» один.
ID MainDiagCode Diag_1 Diag_2 Diag_3 ... NewColumn
Patient1 J123 J123 R343 S753 1
Patient2 G456 F119 E159 G456 3
Patient3 T789 L292 T789 W474 2
Я был в состоянии получить ход цикла:
df$NewColumn[i] <-
unname(which(apply(df[i, 7:26], 2, function(x)
any(
grepl(df$MainDiagCode[i], x)
))))
мне интересно, если есть лучший способ сделать это без использования цикла, так как это очень медленно, действительно.
Заранее спасибо.
Это огромная помощь, спасибо! Чтобы уточнить выражение «x [-c (1,2)]» после «match [...]» ограничивает, где «match [...]» работает в кадре данных? В этой ситуации сопоставление не вычисляется по столбцам 1 и 2, вместо этого выполняется только на оставшихся столбцах кадра данных? – tfmunkey
Правильно. Для любого фрейма данных 'df [, -c (1,2)]' удаляет первые два столбца. Аналогично, для вектора 'x [-c (1,2)]' исключаются первые два элемента.Мы используем векторную нотацию с 'apply', потому что она работает по каждой строке отдельно, поэтому каждая строка является по существу вектором данных. В вашем фактическом производственном коде будет безопаснее исключать столбцы на основе их имен, а не их индексные позиции. – eipi10