2013-10-24 68 views
1

我來自Python的世界。 我只想得到正數,並將非正數設爲零。 在Python:R列表理解if else

>> a = [1,2,3,-1,-2, 0,1,-9] 
>> [elem if elem>0 else 0 for elem in a] 
[1, 2, 3, 4, 0, 0, 0, 1, 0] 

說我有R中的向量,我怎麼能得到相同的結果。

a <- c(1,2,3,-1,-2, 0,1,-9) 
+0

根據你前面的問題,你可能想'一個== 0'取代'一> 0' –

+1

我認爲這個線索對於人們來說更直接瞭解誰問了類似的問題。 –

回答

4

使用ifelse

> ifelse(a>0, a, 0) 
[1] 1 2 3 0 0 0 1 0 

看到?ifelse瞭解詳情。

你也可以使用[選擇那些滿足條件(a<=0)值和0

> a[a<=0] <- 0 
> a 
[1] 1 2 3 0 0 0 1 0 

看到?"["替換它們。

a<=0會給你一個布爾向量,你可以用它作爲索引來識別那些小於或等於0的值,然後執行所需的替換。

雖然使用或者[ifelse是最常見的,在這裏我給一些其他的替代方案:

a[which(a<=0)] <- 0  
#---------------------- 
a[a %in% 0:min(a)] <- 0 # equivalent to a[!a %in% 0:max(a)] <- 0 
#---------------------- 
match(a, 1:max(a), nomatch=0) 
#---------------------- 
pmax(a, 0)