Мой вопрос похож на this one: Мне нужно создать все комбинации между data.frame
и vector
, но мне нужно решение для многоколоновых data.frames, поэтому я могу сократить время вычислений для более крупных проблем ,Комбинация data.frame и vector
Пример того, что я ищу:
Мне нужно создать комбинацию 1:3
с собой три раза, но, в конце концов, мне просто нужно комбинации, что общая sum
составляет менее 5.
Один из способов сделать это - просто использовать expand.grid
и в итоге получить 27 комбинаций, а затем всего 4 комбинации, которые подчиняются моему правилу суммы.
> x = 1:3
> b = expand.grid(x,x,x)
> rows = apply(b,1,sum)
> sum(rows < 5)
[1] 4
# Which rows obey the rule
> b[rows<5,]
Var1 Var2 Var3
1 1 1 1
2 2 1 1
4 1 2 1
10 1 1 2
Это работает просто отлично, но для больших векторов или нескольких комбинаций, а не только 3, она занимает много обработки. Я понял, что еще один способ сделать это было бы разделив задачу и применения фильтра на каждом шаге:
> x = 1:3
> a = expand.grid(x,x)
> rows = apply(a,1,sum)
> sum(rows < 5)
[1] 6
# Which rows obey the rule
> a[rows<5,]
Var1 Var2
1 1 1
2 2 1
3 3 1
4 1 2
5 2 2
7 1 3
А затем взять эти 6 рядов из a
и объединить их с x
, и еще раз подмножество его в соответствии с моим править, но я не знаю, как совместить a
и x
Спасибо! Очень умна идея использования номеров строк data.frame. Я посмотрю 'foreach'. Моя реальная проблема в основном такая же, как описано выше, разница в размере векторов и сколько раз мне нужно объединить ее. Я запускаю симуляцию, которая требует набора параметров, которые, суммированные, не могут превышать определенный порог. – Bernardo