2016-03-11 12 views
0

Следуя из предыдущей задачи: R - return boolean if any strings in a vector appear in any of several columnsR - Подсчитайте, сколько раз подобные строки появляются в нескольких колонках

Я не думаю, что мне нужно было подсчитать количество подобных строк из моего вектора, которые появляются в моем кадре данных , но, оказывается, это полезная информация. D'о!

Проблема: У меня есть большой кадр данных, из которых столбцы с 5 по 24 являются кодами диагностики. Каждая строка - индивидуальный вход в больницу. Вектор risk_codes содержит укороченные коды диагностики. Я искал новый столбец для фрейма данных, который сказал мне, если в 20 кодах диагностики появились какие-либо факторы риска. Уловка заключалась в том, что мне нужен был частичный матч, а не полный матч.

Col1 Col2 Col3 Col4 Diag_1 Diag_2 Diag_3 ... Diag_20 
data data data data J123 F456 H789  E468 
data data data data T452 NA  NA   NA 

код, чтобы сделать это:

df$newcol <- apply(df,1,function(x) any(sapply(risk_codes, function(codes) grepl(codes,x[c(5:24)])))) 
df$newcol <- ifelse(df$newcol,1,0) 

Это успешно возвращает 1 в новом столбец, если какое-либо risk_codes совпадает диагностики кодов допуска в.

risk_codes <- c("J1","F45","H987") 

Col1 Col2 Col3 Col4 Diag_1 Diag_2 Diag_3 ... Diag_20 newcol 
data data data data J123 F456 H789  E468  1 
data data data data T452 NA  NA   NA  0 

Дополнительное осложнение: Теперь я хотел бы, чтобы подсчитать количество совпадений, а не просто видеть, что результаты. Вероятно, это манипуляция первой строкой кода, но я изо всех сил пытаюсь найти логику.

risk_codes <- c("J1","F45","H987") 

Col1 Col2 Col3 Col4 Diag_1 Diag_2 Diag_3 ... Diag_20 newcol count 
data data data data J123 F456 H789  E468  1  2 
data data data data T452 NA  NA   NA  0  0 
+0

Вы должны включить [воспроизводимый пример]() в вопросе с вводом образца и желаемым выход для этого ввода. Странно, что вы указываете «решение» в своем собственном вопросе. Может быть, вы можете сделать это более понятным, что на самом деле не то, что вам нужно. – MrFlick

+0

Хороший момент, извините. – tfmunkey

+0

Я думаю, вы хотите сказать, что столбцы 5-24 являются кодами dx. В противном случае код, возможно, не принесет полезных результатов. –

ответ

1

В предположении, что вы ссылаетесь на столбцы, а не строки, то это должно получится:

df$code_count <- apply(df,1,function(x) 
         sum(sapply(risk_codes, function(codes) grepl(codes,x[c(5:24)])))) 
+0

Боже мой! Спасибо, хотя я немного разочарован тем, что сам не заметил. – tfmunkey