r - 如何使用 dplyr 中的 mutate 创建一系列由指定突变值的向量定义和调用的列?

标签 r dplyr

我想从 mtcars 数据集中获取一列 mpg,并将其每个值除以 1 到 100 之间的数字。这将创建 100 个新列(一个每个设备的列)。列的名称应为 mpg_div_by_1mpg_div_by_2mpg_div_by_3 等。我想我在某处读到 dplyr 可以以一种简单的方式完成它,所以我不必编写循环。

最佳答案

我们可以在这里使用map变体。

library(purrr)
library(dplyr)

cols <- 1:5
map_dfc(cols, ~mtcars %>% transmute(!!paste0("mpg_div_by_", .x) := mpg / .x))

#   mpg_div_by_1 mpg_div_by_2 mpg_div_by_3 mpg_div_by_4 mpg_div_by_5
#1          21.0        10.50     7.000000        5.250         4.20
#2          21.0        10.50     7.000000        5.250         4.20
#3          22.8        11.40     7.600000        5.700         4.56
#4          21.4        10.70     7.133333        5.350         4.28
#5          18.7         9.35     6.233333        4.675         3.74
#....

要将其添加到原始数据帧,我们可以使用bind_cols:

map_dfc(cols, ~mtcars %>% transmute(!!paste0("mpg_div_by_", .x) := mpg / .x)) %>%
      bind_cols(mtcars, .)

这在基础 R 中要简单得多:

mtcars[paste0("mpg_div_by_", cols)] <- lapply(cols, function(x) mtcars$mpg / x)

关于r - 如何使用 dplyr 中的 mutate 创建一系列由指定突变值的向量定义和调用的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61614144/

相关文章:

r - dplyr - mutate_each - 对 POSIXlt 的 colswise 强制失败

用固定值替换非对角线元素

r - 是否可以在scale_fill_gradient2()中定义 "mid"范围?

R:覆盖父命名空间中的变量

具有特定名称的列的按行求和

r - 在 R-studio 中使用 Git : cannot stage modified code files

r - dplyr 自连接与过滤器

regex - 检查字符值是否是有效的 R 对象名称

通过从另一个变量中获取值来随机替换值

r - 提取两个字母之间的字符串并在 R dplyr 中创建一个新列