【问题标题】:generate new columns by dplyr mutate or purrr map通过 dplyr mutate 或 purrr map 生成新列
【发布时间】:2021-04-12 07:32:16
【问题描述】:

我有数据框

set.seed(2021)
data.frame(map(0:5, rnorm, n=10))%>%
  setNames(c('art_1','art_2','vl_1','vl_2','dg_1','dg_2'))
         art_1       art_2      vl_1     vl_2     dg_1     dg_2
1  -0.12245998 -0.08220485 1.0575567 1.036175 4.116389 4.499709
2   0.55245663  0.72717482 1.8143150 1.552056 5.760214 2.744131
3   0.34864950  1.18199540 0.8988754 4.019443 3.654884 5.043741
4   0.35963224  2.50854179 3.2081153 1.578583 6.120000 4.631182
5   0.89805369  2.60447011 0.3750615 2.395468 3.965623 4.039778
6  -1.92256952 -0.84147561 2.1053783 1.416526 3.207846 5.103766
7   0.26174436  2.62331021 0.5445567 1.714068 5.475515 5.427289
8   0.91556637  1.13138902 1.6459839 1.545315 3.274443 4.829518
9   0.01377194  2.48112247 1.9063000 2.912929 4.312379 3.450860
10  1.72996316  2.51331829 3.1006686 3.504736 4.691964 3.494400

我需要生成新列 'art','vl','dg' art = art_1 / art_2 vl = vl_1 / vl_2 dg = dg_1 / dg_2

不要手动

请帮帮我

【问题讨论】:

    标签: r purrr dplyr


    【解决方案1】:

    使用dplyr 非常简单。您可以为此使用mutate。我建议你做一个快速的dplyr 教程。

    library(dplyr)
    df <- data.frame(map(0:5, rnorm, n=10))%>% setNames(c('art_1','art_2','vl_1','vl_2','dg_1','dg_2'))
    
    df %>% 
      mutate(art = art_1 / art_2,
             vl = vl_1 / vl_2,
             dg = dg_1 / dg_2)
    

    【讨论】:

      【解决方案2】:

      这样就可以了。逐步解释-

      • 在向量中存储不带前缀/后缀的不同变量名vars
      • 使用mutateacross
      • 要传递变量名说后缀_1 使用!!运营商以及glue::glue()
      • 现在。 lambda 函数中的 (.x) 将充当这些变量
      • 要更改后缀,请使用 str_replaceget()
      • .names 参数遵循胶水规范。所以在这里只使用'{vars}'
      • 大功告成。
      vars <- c('art','vl','dg')
      
      df %>% mutate(across(!!glue::glue('{vars}_1'), 
                           ~ . / get(str_replace(cur_column(), "1", "2")), 
                           .names = '{vars}'))
      
               art_1       art_2      vl_1     vl_2     dg_1     dg_2         art        vl        dg
      1  -0.12245998 -0.08220485 1.0575567 1.036175 4.116389 4.499709 1.489692871 1.0206354 0.9148122
      2   0.55245663  0.72717482 1.8143150 1.552056 5.760214 2.744131 0.759730141 1.1689755 2.0991033
      3   0.34864950  1.18199540 0.8988754 4.019443 3.654884 5.043741 0.294966886 0.2236318 0.7246374
      4   0.35963224  2.50854179 3.2081153 1.578583 6.120000 4.631182 0.143363067 2.0322754 1.3214770
      5   0.89805369  2.60447011 0.3750615 2.395468 3.965623 4.039778 0.344812439 0.1565713 0.9816438
      6  -1.92256952 -0.84147561 2.1053783 1.416526 3.207846 5.103766 2.284759642 1.4862969 0.6285252
      7   0.26174436  2.62331021 0.5445567 1.714068 5.475515 5.427289 0.099776368 0.3176985 1.0088859
      8   0.91556637  1.13138902 1.6459839 1.545315 3.274443 4.829518 0.809240992 1.0651445 0.6780061
      9   0.01377194  2.48112247 1.9063000 2.912929 4.312379 3.450860 0.005550689 0.6544272 1.2496535
      10  1.72996316  2.51331829 3.1006686 3.504736 4.691964 3.494400 0.688318376 0.8847081 1.3427095
      

      【讨论】:

      • 维伦丹克。你对我很有帮助。
      猜你喜欢
      • 1970-01-01
      • 2023-01-27
      • 2018-09-23
      • 2021-12-02
      • 1970-01-01
      • 2018-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多