2016-02-01 51 views
0

我有一個大數據框(flightFPN,下面的示例),其中的數據對應於不同的組。一個組中的對象具有不同的體積和我各個組內超過特定閾值音量使用此函數繪製的對象的數目:在循環計數器和/或子集函數中應用非整數值R

subflight=subset(flightFPN,Volume>2) 
subflightgrouped=data.frame(table(subflight$Cell.ID)) 
hist(subflightFPN$Volume, breaks=seq(0,11,.2), freq=TRUE, main="Foci   
Volume >2, Flight", xlab="Volume") 

利用平均函數,我還研究了平均數竈爲所有這些特定音量的對象都被截斷。

m=mean(subflightgrouped,Freq) 

我想什麼,雖然做的是使這個平均數每組竈的情節爲截止的功能,我使用(即什麼是每組竈的平均數時,我做卷大於1或大於等於1.1的臨界值。

我一直在嘗試下面的代碼很多變種無濟於事。我想要的是容積切斷從0.5到10步驟.1。我認爲「for(i in seq(.5,10,.1)」的輸入會更好,但根本不起作用。但我下面的內容是最接近我的東西,工作時,它只輸出音量截止值爲1時的結果,沒有其他任何幫助,將非常感謝!

for (i in 1,10) 

    { 
    largeFPNflight=subset(flightFPN, Volume > i) 
    largeFPNflightgrouped=data.frame(table(largeFPNflight$Cell.ID)) 
    m=mean(largeFPNflightgrouped$Freq) 
} 


plot(i,m) 

就樣本數據幀flightFPN而言,Cell.ID類別引用了一個特定的組。因此,例如S101006F5是8個對象(ID 0到7)的家族,每個對象都有獨特的音量。另一組是S101006F4,它是9個對象(0到8)的族。

File  Volume Unit SO ID Cell.ID 
S101006F 0.27 um^3 5 0 S101006F5 
S101006F 0.09 um^3 5 1 S101006F5 
S101006F 3.90 um^3 5 2 S101006F5 
S101006F 0.16 um^3 5 3 S101006F5 
S101006F 0.03 um^3 5 4 S101006F5 
S101006F 0.06 um^3 5 5 S101006F5 
S101006F 0.13 um^3 5 6 S101006F5 
S101006F 0.21 um^3 5 7 S101006F5 
S101006F 0.02 um^3 4 0 S101006F4 
S101006F 0.44 um^3 4 1 S101006F4 
S101006F 0.26 um^3 4 2 S101006F4 
S101006F 0.06 um^3 4 3 S101006F4 
S101006F 0.09 um^3 4 4 S101006F4 
S101006F 0.02 um^3 4 5 S101006F4 
S101006F 0.03 um^3 4 6 S101006F4 
S101006F 0.22 um^3 4 7 S101006F4 
S101006F 0.03 um^3 4 8 S101006F4 
S101006F 0.03 um^3 3 0 S101006F3 
S101006F 1.65 um^3 3 1 S101006F3 
S101006F 0.14 um^3 3 2 S101006F3 
S101006F 0.02 um^3 3 3 S101006F3 
S101006F 0.01 um^3 2 0 S101006F2 
S101006F 0.08 um^3 2 1 S101006F2 
S101006F 0.75 um^3 2 2 S101006F2 
S101006F 0.03 um^3 2 3 S101006F2 
S101006F 0.05 um^3 2 4 S101006F2 
S101006F 0.02 um^3 2 5 S101006F2 
S101006F 0.23 um^3 2 6 S101006F2 
S101006F 0.04 um^3 2 7 S101006F2 
S101006F 0.03 um^3 2 8 S101006F2 
S101006F 0.25 um^3 2 9 S101006F2 
S101006F 0.02 um^3 2 10 S101006F2 
S101006F 0.02 um^3 2 11 S101006F2 

回答

1

您的問題是您需要存儲以後訪問的方式,因爲您一直覆蓋它們。雖然非常直觀(尤其是當你有另一種語言的背景),for循環不是大部分時間去的方法。使用lapply,這是base-R中可能的解決方案。

首先,我們發起閾值的矢量:

my_thresholds <- seq(0,10,0.5) 

然後我們使用lapply到每個閾值執行自定義功能:

res <- lapply(my_thresholds, function(x){ 
    #table by cell ID 
    temp_table <- with(dat[dat$Volume>x,],table(Cell.ID)) 
    #return threshold used and mean of frequencies 
    return(c(threshold=x,mean_freq=mean(temp_table))) 
}) 

這可以一起被綁定到正確的格式爲繪圖:

res <- do.call(rbind,res)