2014-03-12 44 views
2

我目前正在編寫一個自定義函數來實現這個功能,但我想知道是否在R中有一個簡單的內置函數來實現相同的目標。沒有重複的樣本列

我有這樣的數據:

stringVariable1  stringVariable2 

string1    a 
string1    b 
string1    d 
string2    e 
string2    a 
string3    b 

而且我要隨機播放stringVariable2的數據,但我不希望在1

所以這止跌」中對於不同stringVariables重複噸是可接受的(如 'b' 被複制相對於字符串1):

stringVariable1  stringVariable2 

string1    b 
string1    b 
string1    d 
string2    a 
string2    e 
string3    d 

但這:

stringVariable1  stringVariable2 

string1    b 
string1    e 
string1    d 
string2    a 
string2    e 
string3    d 

所以基本上我試圖隨機化stringVariable2,而不是替換爲不同的stringVariable1's。創建自定義函數是唯一的方法嗎?

謝謝!

+0

取決於性能......例如,您可以隨機洗牌var2,檢查重複項,並在需要時重新洗牌 –

+0

我曾設想過,但數據有超過100萬行且有大量重複字符串變量,因此得到至少一個重複是超過99% – Rambatino

+0

(我想運行約10000次) – Rambatino

回答

2

stringVariable1組中的stringVariable2的值是否重複?如果不是這樣,一個組地排列可以與像來執行(d是包含數據的數據幀的名稱):

d$perm1<-as.vector(unlist(tapply(d$stringVariable2, d$stringVariable1, sample))) 

這(tapply())(使用sample()),用於stringVariable2適用取樣無需更換內部每組stringVariable1。最後,使用unlist()as.vector()將結果列表轉換爲矢量。最後一個函數只是刪除矢量內的觀察名稱。置換值然後被存儲在原始數據幀的列perm1中。

+0

真的很好,非常感謝! – Rambatino

+0

啊,我剛剛注意到這並不完全符合我的要求。例如,在採樣方法之後,使用這種方法'e'永遠不會與string1相關聯 - 我希望變量2基本上是隨機的,但是在每個stringvariable1類別中都沒有重複。你介意快點看看嗎? – Rambatino

+1

通常,隨機化遵循數據集或實驗設置的一些特徵。我認爲stringVariable1是一種阻塞,但我想不是。至少現在我不能,找出一個快速和方便的替代方案,通常可以實現您所要求的。你是否檢查過permute軟件包中可用的工具(尤其是小插曲)?它可以讓你指定複雜的隨機方案,也可以滿足你的需求。 – 2014-03-15 15:41:58