【问题标题】:Standardizing columns by groups using r [duplicate]使用 r 按组标准化列 [重复]
【发布时间】:2020-07-30 15:36:59
【问题描述】:

我想按年份标准化我的 DF 中的一些列。我想我正确地分组和选择了我的变量(在这个例子中,变量以 ABC 或 XYZ 结尾),但是我正在使用 mutate 函数。这是我的 DF:

 DF:
 VARTY   VARDCE  Year    Var1ABC   VAr2XYZ  VAR3ABC  VAR4XYZ
  38      67     2015      78        34       68       98
  42      75     2013      85        56       87       75
  56      87     2017      67        72       98       76
  84      82     2018      78        34       91       89
  etc-----

我想要:

DF:
   VARTY   VARDCE  Year    Var1ABC   VAr2XYZ  VAR3ABC  VAR4XYZ Var1ABCZScore  VAr2XYZZScore...  
    38      67     2015      78        34       68       98       1.2            0.7
    42      75     2013      85        56       87       75       0.4            1.3
    56      87     2017      67        72       98       76       -0.2           0.8
    84      82     2018      78        34       91       89        0.6           0.1
    etc-----

This is the code I am using: 
DF.New<-DF%>%
  group_by(Year)%>%
  select(contains(c("ABC", "XYZ")))%>%
  mutate(funs(scale))

感谢任何帮助!

【问题讨论】:

    标签: r scale dplyr data-wrangling


    【解决方案1】:

    无法使用您提供的示例:因此将使用 iris 数据集:

    library(tidyverse)
    iris %>%
      group_by(Species) %>%
      mutate(across(contains(c("Width","Length")),scale))
    # A tibble: 150 x 5
    # Groups:   Species [3]
       Sepal.Length[,1] Sepal.Width[,1] Petal.Length[,1] Petal.Width[,1] Species
                  <dbl>           <dbl>            <dbl>           <dbl> <fct>  
     1           0.267           0.190            -0.357          -0.436 setosa 
     2          -0.301          -1.13             -0.357          -0.436 setosa 
     3          -0.868          -0.601            -0.933          -0.436 setosa 
     4          -1.15           -0.865             0.219          -0.436 setosa 
     5          -0.0170          0.454            -0.357          -0.436 setosa 
     6           1.12            1.25              1.37            1.46  setosa 
     7          -1.15           -0.0739           -0.357           0.512 setosa 
     8          -0.0170         -0.0739            0.219          -0.436 setosa 
     9          -1.72           -1.39             -0.357          -0.436 setosa 
    10          -0.301          -0.865             0.219          -1.39  setosa 
    # ... with 140 more rows
    

    如果您仍在使用旧格式,您可以这样做:

    iris %>%
       group_by(Species) %>%
       mutate_at(vars(contains(c("Width","Length"))),scale)
    # A tibble: 150 x 5
    # Groups:   Species [3]
       Sepal.Length[,1] Sepal.Width[,1] Petal.Length[,1] Petal.Width[,1] Species
                  <dbl>           <dbl>            <dbl>           <dbl> <fct>  
     1           0.267           0.190            -0.357          -0.436 setosa 
     2          -0.301          -1.13             -0.357          -0.436 setosa 
     3          -0.868          -0.601            -0.933          -0.436 setosa 
     4          -1.15           -0.865             0.219          -0.436 setosa 
     5          -0.0170          0.454            -0.357          -0.436 setosa 
     6           1.12            1.25              1.37            1.46  setosa 
     7          -1.15           -0.0739           -0.357           0.512 setosa 
     8          -0.0170         -0.0739            0.219          -0.436 setosa 
     9          -1.72           -1.39             -0.357          -0.436 setosa 
    10          -0.301          -0.865             0.219          -1.39  setosa 
    # ... with 140 more rows
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 2015-01-13
      • 2013-08-05
      • 1970-01-01
      • 2020-07-02
      • 1970-01-01
      相关资源
      最近更新 更多