2013-07-30 38 views
2

我有一個問題,並希望你們中的一些人可以幫助我。問題是這樣的:對於包含長度爲n的向量y和具有k個不同級別的因子f的給定數據幀,我想基於f給數據幀分配長度爲k的新變量z。聚合反轉/按?

例子:

df <- data.frame(y=rnorm(12), f=rep(1:3, length.out=12)) 
z <- c(-1,0,5) 

注意,我真正z已經構建對應於獨特的因子水平,這也就是爲什麼length(z) = length(unique(df$f)。我現在想要創建一個長度爲n = 12的矢量,其中包含對應於因子級別f的值z。 (注:我真正的因子值沒有在上面的例子中有序像,所以只是重複矢量z將無法​​正常工作),

現在,一個顯而易見的解決辦法是創建數據幀外的載體f,合併它與z然後使用merge。例如,

newdf <- data.frame(z=z, f=c(1,2,3)) 
df <- merge(df, newdf, by="f") 

不過,我需要重複這個過程幾千倍,這merge - 溶液似乎是對微生物大炮射擊。因此,我的問題是:這樣做幾乎肯定是一種更簡單,更有效的方式,但我不知道如何。任何人都可以將我指向正確的方向嗎?我正在尋找類似aggregateby的「反向」。

+1

您可能想用語言標籤來編輯該問題,以增加用戶能夠回覆該問題的機會。 – Dukeling

回答

3

假設在z上的值對應於在F水平

df <- data.frame(y=rnorm(12), f= sample(c("a","b","c"),12,replace=T)) 
z <- c(-1,0,5) 
df$newz<-z[df$f] 

在情況下,這是不明確的:此工作,因爲因子蓋爲整數下儲存。當您使用該因子向量對z進行索引時,您將有效地使用基礎整數進行索引,這會指向該因子值的正確z值。

+0

這比我想象的要容易得多。謝謝! – coffeinjunky