如何在R中将mutate_at()与两组变量一起使用 [英] How to use mutate_at() with two sets of variables, in R

查看:48
本文介绍了如何在R中将mutate_at()与两组变量一起使用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Using dplyr, I want to divide a column by another one, where the two columns have a similar pattern. I have the following data frame:

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

我想创建一个新变量:var_a_new = var_a/number_a,var_b_new = var_b/number_b,依此类推,如果我有c,d等.

I would like to create a new variable: var_a_new = var_a/number_a, var_b_new = var_b/number_b and so on if I have c, d etc.

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

我没有得到一个错误,但是结果是错误的.我认为问题在于我不了解"x"是什么.它是.vars中的字符串之一吗?它是My_data中的一列吗?还有吗?

I did not get an error, but a wrong result. I think that the problem is that I don't understand what the 'x' is. Is it one of the string in .vars? Is it a column in My_data? Something else?

推荐答案

一个选项可能是:

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

这篇关于如何在R中将mutate_at()与两组变量一起使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆