2016-07-26 61 views
0

我有5個矢量,其中2個我認爲是「配對」,這意味着它們具有相同數量的元素並且每個矢量中的相應元素彼此相連(在我的例子中,我已經爲不同的Beta分佈指定了alpha和beta)。我想製作三個不成對矢量的元素和另外兩個矢量元素對的所有組合的矩陣。我認爲這樣做的方式是將一個向量中的一個向量的元素與另外三個非配對的向量進行組合,然後將左對齊向量的元素與其伴侶進行匹配。我製作了這些組合,但我正在努力完成第二部分 - 在組合完成後將元素配對。這是我的第一部分代碼:創建一個帶有數字的矢量與另一個矢量中的其他數字「合作」

l <- list(alpha=c(8.572, 20, 23.333, 45), n=c(10, 20, 40), numc=c(2, 3, 5), numq=c(5, 10, 20)) 
combo <- expand.grid(l) 
beta <- c(20, 20, 10, 5) 

「組合」對象中的第幾行是這樣的:

alpha n numc numq 
1 8.572 10 2 5 
2 20.000 10 2 5 
3 23.333 10 2 5 
4 45.000 10 2 5 
5 8.572 20 2 5 
6 20.000 20 2 5 

現在我想插入載體導入叫這個數據幀「beta」將每個alpha值(索引1到4)與來自指定的beta向量I的相應beta值進行配對。例如,每當alpha是8.572,beta是20.我怎麼能這樣做?

+0

這不就是'combo $ beta < - beta'嗎?儘管如果數據還沒有被分類(就像你的情況),你也可以做'組合$ beta < - beta [匹配(組合$ alpha,l $ alpha)]'可能 –

+0

哦,是的。謝謝。它看起來像這樣才起作用,因爲alpha值一次循環一次,但如果我在列表中有alpha或second或third,那麼通過expand.grid運行它,這是行不通的。但沒關係。 –

+1

然後'匹配'將起作用。或'因素'就像下面的答案 –

回答

-1

我想你想要的是

alpha <- factor(combo$alpha) 
beta <- factor(beta) 
combo$beta <- beta[alpha] 

不知道你爲什麼會需要匹配,如果你可以只使用係數的水平?例如,假設你隨機排列阿爾法。

sa <- sample(alpha) 
combo$beta <- beta[sa] 

這應該仍然是正確的。

之後你對此有何評論,@大衛Arenburg:

l <- list(alpha=c(23.333, 20, 45, 8.572), 
    n=c(10, 20, 40), numc=c(2, 3, 5), numq=c(5, 10, 20)) 
combo <- expand.grid(l) 
beta <- factor(c(20, 20, 10, 5)) 
alpha <- factor(combo$alpha) 
combo$beta <- beta[alpha] 

這是不是仍然要OP到底是什麼?

head(combo) 
    alpha n numc numq beta 
1 23.333 10 2 5 10 
2 20.000 10 2 5 20 
3 45.000 10 2 5 5 
4 8.572 10 2 5 20 
5 23.333 20 2 5 10 
6 20.000 20 2 5 20 

,如果你想在一個數值向量的第n個元素映射到一些因素,那你把數字矢量爲有序的因素你可能會考慮。這樣,您可以指定排序,並且它不會取決於您的初始測試版本。

在這裏,我切換了測試版的順序,並且我將水平提供給按照您的原始順序指定的有序因子alpha。

l <- list(alpha=c(23.333, 20, 45, 8.572), 
    n=c(10, 20, 40), numc=c(2, 3, 5), numq=c(5, 10, 20)) 
combo <- expand.grid(l) 
beta <- factor(c(20, 10, 20, 5)) 
alpha <- as.ordered(factor(combo$alpha, 
          levels = c(8.572, 20, 23.333, 45))) 
combo$beta <- beta[alpha] 

你會注意到alpha的水平的第n個元素被映射到beta的第n個元素,就像你最初想要的那樣。如果不是,我建議您使用match

+0

因爲依靠「因素」自己設置等級是危險的。如果'alpha'沒有按照順序排列,那麼你的解決方案將不起作用。考慮下面的例子'alpha < - factor(c(2,1,4,3)); beta < - c(20,10,10,5); beta啊' –

+0

哦,也許是因爲你沒有考慮到他們兩個呢? – shayaa

+0

在你的例子中,'alpha'以'23.333'開頭,'beta'以'20'開頭,而'head(combo)'的第一行在'alpha == 23.333'時顯示'beta == 10',它似乎沒有正常工作 –