私は分子と分母の連結名としてrownamesを持つデータフレームを持っているとします。このデータフレームの2つの列は、このデータフレームのエントリであり、分子と分母である。関数に前後するときのベクトルの順序
up<-c("up1","up2","up3","up4")
down<-c("down1","down2","down3")
singleRatio<-as.data.frame(expand.grid(up,down))
rownames(singleRatio)<-paste(singleRatio$Var1,singleRatio$Var2,sep="_")
colnames(singleRatio)<-c("numerator","denominator")
各分子と分母は、num/denomを行として、サンプルを列として対応するエントリをデータフレームに持ちます。
sample1<-c(1,2,3,4,5,1,2)
sample2<-c(5,4,5,7,2,2,3)
sample3<-c(2,3,6,5,3,2,3)
sample4<-c(5,5,5,8,1,2,3)
data<-data.frame(sample1,sample2,sample3,sample4)
rownames(data)<-c(up,down)
私は比率の全てを計算し、(それが下だ場合、それが閾値を、0の上にいた場合1)しきい値にそれらを比較した試験結果の完全なデータフレームを作成したいです。私は各サンプルのすべての比率を見つけるためにgetRatioと呼ばれる機能を持っている
ratios.df<-data.frame(matrix(nrow = length(rownames(singleRatio)),ncol = length(colnames(data))))
rownames(ratios.df)<-rownames(singleRatio)
colnames(ratios.df)<-colnames(data)
ratios.df
:これはratios.df作成
getRatio<-function(sampleData){
sampleRatios<-rep(0,each=length(rownames(singleRatio)))
names(sampleRatios)<-rownames(singleRatio)
for(ratio in rownames(singleRatio)){
sampleRatios[ratio]<-sampleData[singleRatio[ratio,1]]/(sampleData[singleRatio[ratio,1]] + sampleData[singleRatio[ratio,2]])
}
return(sampleRatios)
}
をそして、これは一緒にすべてを持って私の試みです。
thresholds<-c(0.1,0.5,0.1,0.5,0.1,0.5,0.1,0.5,0.1,0.5,0.1,0.5)
for (sampleName in colnames(data)){
dataline<-data[,sampleName]
names(dataline)<-rownames(data)
sampleRatios<-getRatio(dataline)
ratios.df[,sampleName]<-sampleRatios
#ratios.df[,sampleName]<-ifelse(sampleRatios > thresholds,1,0)
}
結果の比率を見ると、何も一致しないという問題があります。 ratio.dfはされてしまう。
> ratios.df
sample1 sample2 sample3 sample4
up1_down1 0.5000000 0.5000000 0.5000000 0.5000000
up2_down1 0.6666667 0.4444444 0.6000000 0.5000000
up3_down1 0.7500000 0.5000000 0.7500000 0.5000000
up4_down1 0.8000000 0.5833333 0.7142857 0.6153846
up1_down2 0.3333333 0.5555556 0.4000000 0.5000000
up2_down2 0.5000000 0.5000000 0.5000000 0.5000000
up3_down2 0.6000000 0.5555556 0.6666667 0.5000000
up4_down2 0.6666667 0.6363636 0.6250000 0.6153846
up1_down3 0.2500000 0.5000000 0.2500000 0.5000000
up2_down3 0.4000000 0.4444444 0.3333333 0.5000000
up3_down3 0.5000000 0.5000000 0.5000000 0.5000000
up4_down3 0.5714286 0.5833333 0.4545455 0.6153846
、元のデータが
> data
sample1 sample2 sample3 sample4
up1 1 5 2 5
up2 2 4 3 5
up3 3 5 6 5
up4 4 7 5 8
down1 5 2 3 1
down2 1 2 2 2
down3 2 3 3 3
はSAMPLE1ためup1_down1ための比は1 /(+ 5 1)= 0.33ではなく0.50でなければならないことを意味しています。長い話を簡単に言えば、私は何がなぜ、どこで物事がここで交換されているのか分かりません。私が間違っていることを誰でも見ることができますか?
'1 /(1 + 5)= 0.1666667' 「0.33」ではなく) – digEmAll