2016-02-10 117 views
2

我剛開始學習R我需要一些幫助。在R中找到第二低的非零值

我想在某些列中找到最低的非零數字,但如果最低數字是零,那麼我希望得到第二低的數字。

我的代碼看起來像這樣的時刻:

aggregate(M3klar2[,32:35],M3klar2["ID"], function(x) if(min(x)>0) min(x) else if(min(x==0) ??second lowest??) 

我應該後if(min(x==0))?或其他任何建議寫什麼?

+2

歡迎使用stackoverflow。請參閱幫助部分的巡視和常見問題解答。請把你的代碼放在'code section'中。此外,代碼的當前結果是什麼以及您嘗試了哪些內容。 –

+2

一個稍微黑客的方法是'min(x [!! x])' –

回答

0
x <- c(0,0,2,3,4,5,6) 
min(setdiff(x,0)) 
# [1] 2 

將選擇一個向量的最低值之後0

+0

它沒有工作:(你的意思是我應該在if(min(x == 0))之後寫入? – Cham

+0

你也可以使用'sort(unique(x))[2]' – Jimbou

+0

@Jimbou解決了這個問題。 –

3

你並不需要一個if聲明。

x <- c(0,0,2,3,4,5,6) 
> min(x[x > 0]) 
[1] 2 

要應用到特定的列(由@Stephen亨德森的建議)

apply(df[,my.choice],2, min(x[x > 0])) 

或者,如果你也有負數,您可以用x!=0(由@docendo discimus給予澄清)取代x>0

+1

..所以我認爲他想要應用(df [,my.choice],2,min(x [x> 0]))' –

+0

對於特定的列和對於每個個體的「ID」也是如此。因爲同一個人出現在更多 – Cham

+1

最低的非零數字不一定等於最低的正數(即I woul d建議使用'min(x [x!= 0]))而不是 –

相關問題