迭代并在每次迭代r中添加两个值

时间:2018-03-17 00:02:05

标签: r

我有一个数据框(df),大约有100,000个条目(df $ col)。我想迭代每个值并添加先前的所有值以将它们与r中的每个迭代(循环)中的其余值进行比较;类似的事情:

第一次迭代:

[1] vs [2 .... n]

第二次迭代:

[1 + 2] vs [3 .... n]

直到

[1 .... n-1] vs [n]

我试图在r:

中编写一个简单的以下代码
aa <- function(df) {
     df <- data.table(d, key = "a")
     m <-df[, sum(x), by="b"]
     nm <-df[, sum(y), by="c"]
     for (i in m$V1)
       l <- i+1
       m <- nm$V1 - l
       print(l, m)
}

任何想法,我怎样才能以更好的方式实现它?感谢

1 个答案:

答案 0 :(得分:0)

这取决于你的最终目的。如果要将矢量(或data.frame列)划分为两个相同权重(元素总和)的片段,可以尝试将矢量元素分成两半:[50% | 50%],然后重复将较重的分区分成两半(再次根据元素数量,从而得到[75% | 25%][25% | 75%]),依此类推。可能存在确切的解决方案(例如,对于向量1,1,1,5),并且可能存在任意数量的解决方案,这意味着您将必须调整此基本O(log n)二进制搜索。

如果您真的想要显示所有权重对,可以在O(n)中尝试以下内容:

aa=function(df,colname) #arguments: data frame and name (or index) of column
{
    #let's trust the input is sane and go ahead:
    x=df[,colname]
    total=sum(x)
    elems=length(x) #could use nrow(df)
    upper=0
    for(i in 1:(elems-1))
    {
        upper=upper+x[i]
        cat(sep="","First ",i," vs. the other ",elems - i,": ",upper," vs. ",total - upper,"\n") #could use sprintf() for nicer formatting
    }
    #return anything if wanted
}