2013-12-09 66 views
1

我有以下的數據幀:規格化值,以獲得開銷

df <- data.frame(
     Target=rep(LETTERS[1:3],each=8), 
     Prov=rep(letters[1:4],each=2), 
     B=rep("5MB"), 
     S=rep("1MB"), 
     BUF=rep("8kB"), 
     M=rep(c('g','p')), 
     Thr.mean=1:24) 

其列Thr.mean我想通過其中Target=='C'(I不介意安裝一個新的列)的值歸一化。

爲了澄清,我想直到結束:

Thr.mean <- c(1/17,2/18,3/19,4/20,5/21,6/22,7/23,8/24,9/17,10/18,11/19,12/20,13/21,14/22,15/23,16/24,1,1,1,1,1,1,1,1) 

現在,它可能發生,有在這個數據幀,其中Target!='C'行,而不是他們在SB值出現在Target=='C'的行中,對於這些我也想計算開銷。最重要的匹配列是M,然後是BUF,BS

任何想法如何做到這一點?我可以寫幾個循環和ifs,但我正在尋找一個更優雅的解決方案。

+0

你怎麼在這方面的意思正常化?此外,您需要的Thr.mean系列的行數比原始數據框少。請原諒我,但這造成了一點困惑。 – sidquanto

+0

修復了'Thr.mean'系列,謝謝指出。通過標準化,我的意思是說我有一些我想作爲規範處理的測量值(在本例中爲'Target =='C''),並在其他測量值中將觀測值標準化(「Thr.mean」列)實驗。 –

回答

0

對於後人,

我如何解決我的問題的方法是使用data.table

DT <- data.table(df) 
DT[, Thr.Norm.C := .SD[Target=='C', Thr.mean], by = 'B,BUF,Prov'] 
DT[, over.thr := Thr.Norm.C/Thr.mean]