我有以下数据框:
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'
的值来规范化(我不介意附加新列)。
为了澄清,我想最终:
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'
,并且S
或B
中的值不存在于{{1}的行中对于这些,我还想计算开销。最重要的匹配列是Target=='C'
,然后是M
,BUF
和B
。
任何想法怎么做?我可以写几个循环和ifs,但我正在寻找一个更优雅的解决方案。
答案 0 :(得分: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]