“Case_when”取决于 R 中元素的索引?

问题描述 投票:0回答:1

向量化运算往往可以将逻辑应用于向量的每个元素。

但是,假设我有一个向量,即

> 1:10
[1]  1  2  3  4  5  6  7  8  9 10

我想对除第一个和最后一个元素之外的每个元素应用一个函数,例如乘以 0.5:我想将它们乘以 0.3。

有 dplyr (或任何其他矢量化)方法可以做到这一点吗?

我知道使用 if-else 结构的 sapply 可以达到目的,即

sapply(seq(1:10), #I know seq() is not actually needed in this particular case
    function(i) {
        if(i == 1 | i == length(1:10)) {
            (1:10)[i]*0.3
        } else {
            (1:10)[i]*0.5
        }
    }
)

...但是具有索引相关 case_when 的矢量化解决方案会很好。

r dplyr vectorization
1个回答
0
投票

ifelse
已矢量化,因此您可以使用

x <- 1:10
x * ifelse(x %in% c(1, length(x)), 0.3, 0.5)
#[1] 0.3 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 3.0

这是另一个具有相同逻辑但没有

ifelse

x * c(0.5, 0.3)[x %in% c(1, length(x)) + 1]
© www.soinside.com 2019 - 2024. All rights reserved.