我目前正在设计R中基本上是最大化算法的过程。我想弄清楚的是如何为每个"应用" "子集" (更确切地说,"计数/总和,如果")对于未定义数量的变量(每个变量都在其自己的列中)。
对于下面的示例,我将使用包含3个变量列的数据集(不包括ID和类别变量,这些变量不属于最大化过程)。
library(plyr)
library(dplyr)
sample_data <- cbind(c(1:400), c(rep(1, 20), rep(2, 200), rep(3, 140), rep(4, 40)),
randu[,1]*1000000+1, round(randu[,2]*100,0)+1, randu[,3])
colnames(sample_data) <- c("ID", "Category", "Dollar_Volume", "Count", "Percentage1")
percentiles <- matrix(seq(.01, 1, .01), ncol = 1)
for (c in 3:ncol(sample_data))
{
percentiles <- cbind(percentiles,
matrix(round(quantile(sample_data[,c], seq(.01, 1, .01)), digits = 2), ncol = 1))
}
colnames(percentiles) <- c("Percentile", colnames(sample_data)[3:ncol(sample_data)])
所以现在我想做的是基本上得到我所计算的百分位数的所有独特组合(例如(第1 /第1 /第1;第1 /第1 /第2; ......;第100 /第100 /第100) )对于我的N个变量,然后进行检查,以便:
Ncount <- sum(sample_data[,c] >= PercentileN[,c]
& sample_data[,c + 1] >= PercentileN[,c + 1]
& ...
& sample_data[,ncol(sample_data)] >= PercentileN[,ncol(sample_data)]
)
这基本上只是检查了我的&#34; sample_data&#34;对于N个参数的百分位数的每个可能组合,行都在所选择的当前百分位数组合之上。
然后这个&#34; Ncount&#34;值以及用于生成该数字的相关参数百分位数值将被添加到稍后要引用的表中。之后还有其他步骤,但与我被困的地方无关。
基本上,我的问题归结为如何做到这最后一部分 - 我不知道如何动态地和#34;子集&#34;通过可变数量的参数。
非常感谢任何帮助或想法。
提前致谢!!
答案 0 :(得分:0)
我希望我能在这里正确理解你 - 你可以通过grid.expand
获得所有可能的组合。然后,您可以使用矢量化来检查所有行的样本数据是否更大。每行组合。
首先,检查行值是否更大。然后通过colSums == 3
all_combs = t(expand.grid(percentiles[, 2], percentiles[, 3], percentiles[, 4]))
apply(sample_data[, 3:5], 1, function(x) sum(colSums(x >= all_combs) == 3))