我有一个数据框(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)
}
任何想法,我怎样才能以更好的方式实现它?感谢
答案 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
}