根据组最大值动态创建新列

时间:2018-01-03 17:45:19

标签: r

我们假设我有一个名为DT %>% group_by(Country) %>% select(a, b, c, d, e, f)%>% mutate(max = max()) 的数据框。我想根据"国家"进行分组。列,并找到列B,C,D,E,F的最大值。然后,我想创建名为B_max,C_max,D_max,E_max和F_max的新列,每列具有最大值。

我可以在Base R中通过一长串命令轻松完成此操作。我想知道在dplyr中是否有一种更简约的方法可以做到这一点?所以,例如:

{{1}}

这使我获得了按国家/地区折叠的数据框中的正确最大值。那我怎么会解开这个数据框并创建所有a_max,b_max,c_max等等?

1 个答案:

答案 0 :(得分:3)

以下是使用mtcars数据集的解决方案:

library(dplyr)

mtcars %>%
  group_by(cyl) %>%
  select(cyl, disp, hp, drat) %>%
  mutate_all(funs(max = max)) %>%
  ungroup()

# # A tibble: 32 x 7
#     cyl  disp    hp  drat disp_max hp_max drat_max
#   <dbl> <dbl> <dbl> <dbl>    <dbl>  <dbl>    <dbl>
# 1  6.00   160 110    3.90      258    175     3.92
# 2  6.00   160 110    3.90      258    175     3.92
# 3  4.00   108  93.0  3.85      147    113     4.93
# 4  6.00   258 110    3.08      258    175     3.92
# 5  8.00   360 175    3.15      472    335     4.22
# 6  6.00   225 105    2.76      258    175     3.92
# 7  8.00   360 245    3.21      472    335     4.22
# 8  4.00   147  62.0  3.69      147    113     4.93
# 9  4.00   141  95.0  3.92      147    113     4.93
# 10 6.00   168 123    3.92      258    175     3.92
# # ... with 22 more rows

请注意:(a)您必须在select中包含分组变量,否则该过程会强制将其包含在内并向您显示警告,(b)您需要在funs()内使用_max mutate_all如果你想拥有mutate_all前缀并保留原始列,(c)分组变量不受funs()的影响。

否则,如果您不使用mtcars %>% group_by(cyl) %>% select(cyl, disp, hp, drat) %>% mutate_all(max) %>% ungroup() # # A tibble: 32 x 4 # cyl disp hp drat # <dbl> <dbl> <dbl> <dbl> # 1 6.00 258 175 3.92 # 2 6.00 258 175 3.92 # 3 4.00 147 113 4.93 # 4 6.00 258 175 3.92 # 5 8.00 472 335 4.22 # 6 6.00 258 175 3.92 # 7 8.00 472 335 4.22 # 8 4.00 147 113 4.93 # 9 4.00 147 113 4.93 # 10 6.00 258 175 3.92 # # ... with 22 more rows ,它将如下所示:

select

您可以看到,在这种情况下,原始列被最大值替换,因为它们具有相同的名称。

如果您想要遵循相同的方法,但没有mutate_at以保留所有原始列,则可以使用library(dplyr) mtcars %>% group_by(cyl) %>% mutate_at(vars(disp,hp,drat), funs(max = max)) %>% ungroup() # # A tibble: 32 x 14 # mpg cyl disp hp drat wt qsec vs am gear carb disp_max hp_max drat_max # <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> # 1 21.0 6.00 160 110 3.90 2.62 16.5 0 1.00 4.00 4.00 258 175 3.92 # 2 21.0 6.00 160 110 3.90 2.88 17.0 0 1.00 4.00 4.00 258 175 3.92 # 3 22.8 4.00 108 93.0 3.85 2.32 18.6 1.00 1.00 4.00 1.00 147 113 4.93 # 4 21.4 6.00 258 110 3.08 3.22 19.4 1.00 0 3.00 1.00 258 175 3.92 # 5 18.7 8.00 360 175 3.15 3.44 17.0 0 0 3.00 2.00 472 335 4.22 # 6 18.1 6.00 225 105 2.76 3.46 20.2 1.00 0 3.00 1.00 258 175 3.92 # 7 14.3 8.00 360 245 3.21 3.57 15.8 0 0 3.00 4.00 472 335 4.22 # 8 24.4 4.00 147 62.0 3.69 3.19 20.0 1.00 0 4.00 2.00 147 113 4.93 # 9 22.8 4.00 141 95.0 3.92 3.15 22.9 1.00 0 4.00 2.00 147 113 4.93 # 10 19.2 6.00 168 123 3.92 3.44 18.3 1.00 0 4.00 4.00 258 175 3.92 # # ... with 22 more rows 代替:

pipeline{
    agent none
    stages {
        stage("Unit Testing"){
            agent { label 'maven-build-slave' }
            steps{
            }
        }
        stage('Sonar Scanner - Quality Gates') {
            agent { label 'maven-build-slave' }
            steps{
            }
        }
        stage("Integration"){
            agent { label 'integration-slave' }
            steps{
            }
        }
        stage('SoapUI') {
            agent { label 'integration-slave' }
            steps{
            }
        }
    }
}