Как я могу отфильтровать искровой СДР по результатам сопоставления? - PullRequest
0 голосов
/ 09 февраля 2019

Мне нужно отфильтровать СДР по результату сопоставления.Первоначально у меня есть СДР диагноза:

Диагностика (000140966-01,2008-07-06,250.00) Диагностика (202009464-01,2009-09-29, V70.0) Диагностика (202009464-01,2009-09-29,590.80) Диагностика (818009099-01,2014-12-11,592.0) Диагностика (545360000-01,2005-12-09,584.9) Диагностика (000012631-01,2013-09-23, V70.0) Диагностика (666071437-01,2006-11-29,496) Диагностика (000681687-01,2006-06-28,250.01) Диагностика (497910000-01,2009-04-07,584.9) Диагностика (022001344-01,2011-11-28,584.9) Диагностика (285060000-01,2012-03-28,584,9) ....

Где: класс случая Диагностика (PatientID: строка, дата: дата, код: строка)

Я группирую пациентов:

val grouped_patients = diagnostic.groupBy(_.patientID)
grouped_patients.take(50).foreach(println)

(000644947-01, CompactBuffer (Диагностика (000644947-01,2010-09-22,584.9), Диагностика (000644947-01,2007-02-02,584.9), Диагностика (000644947-01,2014-06-15,250.01), Диагностика (000644947-01,2009-01-02,250.01), ...)) (000124665-01, CompactBuffer (диагностика (000124665-01,2006-09-05, V70.0)), диагностика (000124665-01,2011-11-21,585,9), Диагностический (000124665-01), 2009-10-14,585.9), ....))

Мне нужно отфильтровать пациентов с помощью определенного кода (у меня есть набор этих кодов T1DM_DX).

Я могу распечатать:

val grouped_patient_fil_1 = diagnostic.groupBy(_.patientID)
    .map(x => x._2.map(y => y.code))
    .map(x=>x.toSet.intersect(T1DM_DX).size>0)
    .take(100).foreach(println)

... false false false true true false true false false true false false false ....

Как отфильтровать grouped_patients длякакой у нас "Правда"?Я думаю, что это должно быть как:

val grouped_patient_fil_1 = grouped_patients
    .filter(x => x._2.map(y => y.code)
          .map(x=> x.toSet.intersect(T1DM_DX).size>0))

Но я получаю ошибку:

T2dmPhenotype.scala:71:37: type mismatch;
[error]  found   : scala.collection.immutable.Set[String]
[error]  required: scala.collection.GenSet[Any]
[error] Note: String <: Any, but trait GenSet is invariant in type A.
[error] You may wish to investigate a wildcard type such as `_ <: Any`. (SLS 3.2.10)
[error]         .map(x => x.toSet.intersect(T1DM_DX).size > 0))

1 Ответ

0 голосов
/ 09 февраля 2019

Если у вас уже есть массив с Boolean объектами, просто измените это map на filter в вашем потоке, в результате чего останутся только истинные значения:

val grouped_patient_fil_1 = diagnostic
    .groupBy(_.patientID)
    .filter(x => x._2.map(y => y.code).toSet.intersect(T1DM_DX).size>0)
grouped_patient_fil_1.take(100).foreach(println)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...