向量化操作的工作方式是将逻辑应用于向量的每个元素.

然而,让我们假设我有一个向量,即

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

我想对每个元素应用一个函数,比方说,乘以0.5,除了第一个和最后一个元素:我想把它们乘以0.3.

有没有一种dplyr(或任何其他矢量化的)方法来做到这一点?

我知道带有If-Else struct 的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的向量化解决方案将是好的.

推荐答案

由于您在标题中明确提到了case_when,因此一个依赖于指数的case_when解决方案可能是:

library(dplyr)

x <- 1:10

data.frame(x) %>%
  mutate(x_mult = case_when(
    row_number() == 1 | row_number() == n() ~ x * 3,
    TRUE ~ x * 5
  ))

输出:

    x x_mult
1   1      3
2   2     10
3   3     15
4   4     20
5   5     25
6   6     30
7   7     35
8   8     40
9   9     45
10 10     30

R相关问答推荐

ggplot geom_smooth()用于线性回归虚拟变量-没有回归线

根据R中两个变量的两个条件删除带有dspirr的行

如何利用模型函数在格图中添加双曲/指数曲线

如何编辑ggplot的图例字使用自定义对象(gtable)?'

如何使用R对每组变量进行随机化?

如何自定义3D散点图的图例顺序?

如何计算多个日期是否在一个日期范围内

移除仪表板Quarto中顶盖和车身之间的白色区域

R中1到n_1,2到n_2,…,n到n_n的所有组合都是列表中的向量?

随机森林的带Shap值的蜂群图

从R中发出的咕噜声中的BUG?

当每个变量值只能 Select 一次时,如何从数据框中 Select 两个变量的组合?

创建在文本字符串中发现两个不同关键字的实例的数据框

向R中的数据帧添加一列,该列统计另一列中每个唯一值的二进制观测值的数量

网络抓取新闻标题和时间

随机将数据帧中特定列上的某些行设置为NA

重写时间间隔模糊连接以减少内存消耗

随机生成样本,同时在R内的随机样本中至少包含一次所有值

对数据帧中的列进行子集设置以通过迭代创建新的数据帧

用逗号拆分字符串,并删除一些字符