【问题标题】:R list comprehension if else [duplicate]如果不是,R列表理解[重复]
【发布时间】:2013-11-03 12:16:10
【问题描述】:

我来自 Python 世界。 我只想获得正数并将非正数设置为零。 在 Python 中:

>> 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)

【问题讨论】:

  • 根据您之前的问题,您可能需要a==0 而不是a&gt;0
  • 我认为这个帖子更容易让人们理解谁提出了类似的问题。

标签: r list-comprehension


【解决方案1】:

使用ifelse

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

详情请参阅?ifelse。

您也可以使用[ 选择那些满足条件的值(a&lt;=0)并将它们替换为0

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

见?"["。

a&lt;=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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 2020-09-10
    • 2011-06-15
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多