簡體   English   中英

如何使用 dplyr 中的 mutate 創建一系列由指定突變值的向量定義和調用的列?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM