![](/img/trans.png)
[英]use dplyr mutate to create new columns based on a vector of column names
[英]How to use mutate from dplyr to create a series of columns defined and called by a vector specifying values for mutation?
我想從 mtcars 數據集中取出一列“mpg”,並將它的每個值除以 1 到 100 之間的數字。這將創建 100 個新列(每個除數一列)。 列的名稱應為“mpg_div_by_1”、“mpg_div_by_2”、“mpg_div_by_3”。 我想我在某處讀到 dplyr 1.0 可以以一種簡單的方式做到這一點,所以我不必編寫循環。
我們可以在這里使用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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.