如何在 R 中将 mutate_at() 与两组变量一起使用

Rti*_*ist 3 scope r dplyr

使用 dplyr,我想将一列除以另一列,其中两列具有相似的模式。我有以下数据框:

My_data = data.frame(
  var_a = 101:110,
  var_b = 201:210,
  number_a = 1:10,
  number_b = 21:30)
Run Code Online (Sandbox Code Playgroud)

我想创建一个新变量:var_a_new = var_a/number_a、var_b_new = var_b/number_b 等等(如果我有 c、d 等)。

My_data %>%
  mutate_at(
    .vars = c('var_a', 'var_b'),
    .funs = list( new = function(x) x/(.[,paste0('number_a', names(x))]) ))
Run Code Online (Sandbox Code Playgroud)

我没有得到错误,但得到了错误的结果。我认为问题是我不明白“x”是什么。它是 .vars 中的字符串之一吗?它是 My_data 中的一列吗?还有别的事吗?

tmf*_*mnk 5

一种选择可能是:

bind_cols(My_data,
          My_data %>%
           transmute(across(starts_with("var"))/across(starts_with("number"))) %>%
           rename_all(~ paste0(., "_new")))

   var_a var_b number_a number_b var_a_new var_b_new
1    101   201        1       21 101.00000  9.571429
2    102   202        2       22  51.00000  9.181818
3    103   203        3       23  34.33333  8.826087
4    104   204        4       24  26.00000  8.500000
5    105   205        5       25  21.00000  8.200000
6    106   206        6       26  17.66667  7.923077
7    107   207        7       27  15.28571  7.666667
8    108   208        8       28  13.50000  7.428571
9    109   209        9       29  12.11111  7.206897
10   110   210       10       30  11.00000  7.000000
Run Code Online (Sandbox Code Playgroud)

  • 它从 1.0.0 版本开始可用。尝试更新到最新版本。 (3认同)