2013-07-30 50 views
1

我正在使用miscTools軟件包並希望使用colMedians。我將數據分成許多組,結果這些組中的一些只有一行。因此,colMedians說「參數'x'必須是數字」。有沒有辦法讓colMedians忽略這些組(或讓這些值反芻),但是計算具有多行的組的Stage.Duration的中位數?在R中,colmedia如何忽略1行條目? (在分組/分組數據中)

數據看起來像這樣:

Opportunity.Name  Stage.Duration  Probability 
     Bob     10     20 
     Bob     20     50 
     Bob     76     90 
     Jon     50     80 
     Jon     34     50 
     Jon     23     100 

gdata <- split(data, Opportunity.Name) 
gdata$`Bob` 
Opportunity.Name  Stage.Duration  Probability 
     Bob     10     20 
     Bob     20     50 
     Bob     76     90   
seven <- lapply(gdata, function(x){x[x$Probability>=70,]}) 
seven 
Opportunity.Name  Stage.Duration  Probability 
     Bob     76     90   

med<-sapply(seven, function(x) colMedians(x[,c("Stage.Duration", "Probability")])) 

注:「配有」碼計算中位數爲Stage.Duration和概率,但我只想Stage.Duration,我只需要兩列運行此特定代碼並不知道如何運行類似的功能。此代碼適用於colMeans。

+0

則不要使用兩列子集...用'colMedians(X [, '概率',降= FALSE])'...或者直接使用'median'函數... – Justin

+1

我只是使用'drop = FALSE' –

+0

我嘗試了colMeans上面的代碼,它改變了我的一些數據(我懷疑是因爲drop = FALSE)。最終,我需要將其導入Excel中,以保持格式化的連續性,這將有所幫助。 – user2634937

回答

0

使用括號[ ]對數組或矩陣進行子集化時,如果結果合適,通常會將結果強制轉換爲較小的維度對象。要關閉該行爲,有一個名爲drop標誌:

# Sample Matrix 
M <- matrix(1:20, ncol=5) 

# Gets coerced to a single vector: 
colMeans(M[3, ]) 
    # Error in colMeans(M[3, ]) : 
    # 'x' must be an array of at least two dimensions 

# Remains two-dimensional 
colMeans(M[3, , drop=FALSE]) 
    # [1] 3 7 11 15 19 
+0

drop = FALSE正在考慮我用lapply濾掉的值。有沒有辦法確保drop = FALSE確認這些過濾值? – user2634937

+0

我不確定你指的是什麼。也許你可以發佈一個可重現的例子? –

+0

我不太確定我怎麼能夠給你一個例子(對不起,我是新的:(),但最終,當我應用drop = FALSE時,它會計算原始數據集的中位數(在我過濾之前out out probability大於或等於70%),它不會計算修剪後的數據「seven」,但是gdata $'Bob' – user2634937