我想从 mtcars
数据集中获取一列 mpg
,并将其每个值除以 1 到 100 之间的数字。这将创建 100 个新列(一个每个设备的列)。列的名称应为 mpg_div_by_1
、mpg_div_by_2
、mpg_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/