Scala鞍形过滤列值

Scala鞍形过滤列值,scala,saddle,Scala,Saddle,我是scala Saddle的新手,我在一个框架中有三列(客户名称、年龄和状态)。我必须在列(年龄)中应用过滤器。如果任何年龄超过18岁的客户,我需要将状态设置为“合格”,否则我需要输入“noteligible” 代码: 框架是不可变的容器,所以用完全初始化的值构建框架可能比从部分初始化的框架开始要好 import org.saddle._ object Test { def main(args: Array[String]): Unit = { val names: Vec[An

我是scala Saddle的新手,我在一个框架中有三列(客户名称、年龄和状态)。我必须在列(年龄)中应用过滤器。如果任何年龄超过18岁的客户,我需要将状态设置为“合格”,否则我需要输入“noteligible”

代码:


框架是不可变的容器,所以用完全初始化的值构建框架可能比从部分初始化的框架开始要好

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)
  }
}
如果确实需要从部分初始化的帧开始,则始终可以删除未初始化的列,并使用正确计算的值将其添加回

虽然我更喜欢强类型的数据列,但我认为一个框架只包含一种类型的数据,“Int”和“String”的常见类型是“Any”。这也会影响方法的类型签名,尽管您可能希望在没有类型信息的情况下内联它们

我发现看电视帮助很大

这是最终println调用的输出:

[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 

为了测试投票/喝酒/吸烟的资格,可能x>=18richj.,谢谢您的回复。我需要根据年龄列更改列值。
[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