2014-02-20 123 views
1

我需要將數字向量y轉換爲一個因子(使用cut2{Hmisc}),但我想單獨爲另一個向量x的每個值執行此操作。R - 提取 - 變換 - 替換矢量的子集:替代循環?

現在我使用的是for循環:

x <- c(1,3,2,3,3,1,2,2,1,3,1,3,2,2,1) 
y <- abs(rnorm(15)) 
yf <-NULL 
for (i in 1:3) { 
yf[x==i]<-cut2(y[x==i],g=2) 
} 

我很難找到不涉及一個循環的解決方案。任何人都可以提出一個解決方案,使用apply或甚至更好的矢量化解決方案?任何有識之士將非常感謝!

編輯: 我的問題歸結爲:是否有一種簡單的方法可以將函數應用於同一個向量多次,但順序地爲參數的不同值(在此定義數據組)。在我的情況的職能將是:

function(i) { 
yf[x==i]<-cut2(y[x==i],g=2) 
} 

ave的工作,但沒有任何其他簡單的解決方案?

+0

什麼是這些數據。例如你想要的輸出? – Thomas

+0

我不確定要理解你的問題。我想最終得到一個與y相同長度的整數向量'yf'。當使用'by'或'tapply'時,我最終得到了幾個子向量,但是我需要將它們分配給一個長度與y相同的'yf'向量。這是我沒有使用循環麻煩的一步。 – mimi

回答

2

您可以使用ave

ave(y, x, FUN = function(i) cut2(i, g = 2))