2015-04-20 3 views
2

Je suis nouveau sur scala Saddle, j'ai trois colonne (nom du client, âge et statut) dans un cadre. Je dois appliquer le filtre dans la colonne (âge). Si l'âge d'un client ayant plus de 18 ans, j'ai besoin de définir le statut est "admissible", sinon je dois mettre "non admissible".Valeurs de colonne de filtrage Scala Saddle

code:

f.col("age").filterAt(x => x > 18) //but how to update Status column 
+0

Merci, NorthCat –

+0

Pour tester le droit de vote/boisson/fumée qui devrait probablement être x> = 18 – richj

+0

richj, merci pour votre répondre. Je dois changer la base des valeurs de colonne sur la colonne d'âge. –

Répondre

0

Les cadres sont immuables des conteneurs, il est donc sans doute préférable de construire votre cadre avec les valeurs entièrement initialisés que commencer par un cadre partiellement initialisés.

import org.saddle._ 

object Test { 
    def main(args: Array[String]): Unit = { 
    val names: Vec[Any] = Vec("andy", "bruce", "cheryl", "dino", "edgar", "frank", "gollum", "harvey") 
    val ages: Vec[Any] = Vec(4, 89, 7, 21, 14, 18, 23004, 65) 

    def status(age: Any): Any = if (age.asInstanceOf[Int] >= 18) "eligible" else "noteligible" 

    def mapper(indexAge: (Int, Any)): (Int, _) = indexAge match { 
     case (index, age) => (index, status(age)) 
     } 

    val nameAge: Frame[Int, String, Any] = Frame("name" -> names, "age" -> ages) 
    val ageCol: Series[Int, Any]  = nameAge.colAt(1) 
    val eligible: Series[Int, Any]  = ageCol.map(mapper) 

    println("" + nameAge) 
    println("" + eligible) 

    val nameAgeStatus: Frame[Int, String, _] = nameAge.joinSPreserveColIx(eligible, how=index.LeftJoin, "status") 

    println("" + nameAgeStatus) 
    } 
} 

Si vous avez vraiment besoin de commencer à partir d'un cadre partiellement initialisées, vous pouvez toujours déposer la colonne uninitialised et l'ajouter à nouveau avec les valeurs calculées correctement.

Bien que je préférerais taper fortement les colonnes de données, je pense qu'un cadre contient uniquement des données d'un type, et le type commun pour "Int" et "String" est "Any". Cela affecte également les signatures de type des méthodes, bien que vous souhaitiez les intégrer sans les informations de type.

J'ai trouvé que regarder le scaladoc m'a beaucoup aidé.

C'est la sortie de l'appel println final:..

[8 x 3] 
     name age  status 
    ------ ----- ----------- 
0 -> andy  4 noteligible 
1 -> bruce 89 eligible 
2 -> cheryl  7 noteligible 
3 -> dino 21 eligible 
4 -> edgar 14 noteligible 
5 -> frank 18 eligible 
6 -> gollum 23004 eligible 
7 -> harvey 65 eligible 
+0

merci cela sera utile pour moi .. –