【问题标题】:R top n results from a sorted list and dynamic predicate constructionR top n 结果来自排序列表和动态谓词构造
【发布时间】:2014-07-01 11:57:57
【问题描述】:

我有两个问题:

  1. 设计一个动态R代码函数,接收参数N(整数)和L(字符列表) 并执行以下操作: 用 OR 运算符动态构造一个谓词作为数字 N。 例如,如果 N=2,谓词将是:data.clean.test[j,c(L[[1]])] == TRUE OR data.clean.test[j,c(L[[2]])] 或者如果 N=3 它将是 data.clean.test[j,c(L[[1]])] == TRUE OR data.clean.test[j,c(L[[2]])] == TRUE OR data.clean.test[j,c(L[[3]])] == TRUE 等等……

  2. 从未排序的小数列表中选择前 N 个结果(概率在 0 和 1 之间)

有什么想法吗?这不是作业,而是真正的预测分析用例......

【问题讨论】:

标签: r list sorting max predicate


【解决方案1】:

也许......猜测 data.clean.test 是一个函数而不是一个数据对象:

any( sapply( L , data.clean.test, j)

或者如果这个猜测是错误的并且“j”是你工作区中的一个常数,那么:

any( sapply( L, function(x) data.clean.test[ j, x] )

any 函数将测试任何 TRUE(或强制转换为 TRUE)值。这意味着“==”或any 将给出一个“真”值——对于不等于 0 或逻辑 TRUE 的数值。

【讨论】:

    【解决方案2】:

    假设你的数据看起来有点像这样

    set.seed(104)
    dd<-data.frame(
      a=sample(c(T,F),25, replace=T),
      b=sample(c(T,F),25, replace=T),
      c=sample(c(T,F),25, replace=T),
      d=sample(c(T,F),25, replace=T),
      prob = runif(25)
    )
    
    collist<-list("a","c","b")
    

    那么在第 1 部分中可以实现您想要的功能是

    myfun<-function(N) {
        rowmatches <- apply(as.matrix(dd[, unlist(collist[1:N])]), 1, any)
        dd[rowmatches, ]
    }
    

    无需动态构建谓词列表。在这里,我们只是从 data.set 中提取您要求的列并将其转换为矩阵。然后我们使用apply 扫描行中的值,看看是否有任何为真。然后我们返回匹配的行。所以

    myfun(1)
    # nrow(myfun(1)) == sum(dd$a==T)
    # TRUE
    

    返回 a 列为真的所有行。和

    myfun(2)
    # nrow(myfun(2)) == sum(dd$a==T | dd$c==T)
    # TRUE
    

    返回列“a”或“c”为真的所有行。

    然后,如果你想获取列表中的最高值,你可以这样做

    result<-myfun(2)
    head(result[order(result$prob),], 3)
    #       a    b     c     d       prob
    #15 FALSE TRUE  TRUE FALSE 0.08670653
    #14  TRUE TRUE FALSE FALSE 0.12188057
    #16  TRUE TRUE  TRUE  TRUE 0.13206675
    

    您使用order() 对data.frame 进行排序并使用head() 提取一定数量的行(在本例中为3)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-07
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      相关资源
      最近更新 更多