代码之家  ›  专栏  ›  技术社区  ›  MYaseen208

dplyr:使用poly函数生成多项式系数

  •  3
  • MYaseen208  · 技术社区  · 6 年前

    df1 <- 
      structure(list(
        Y = c(4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 16, 16, 16, 
              16, 16, 32, 32, 32, 32, 32, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 16, 
              16, 16, 16, 16, 32, 32, 32, 32, 32, 4, 4, 4, 4, 4, 8, 8, 8, 8, 
              8, 16, 16, 16, 16, 16, 32, 32, 32, 32, 32)), 
        class = "data.frame", row.names = c(NA, -60L))
    
    library(tidyverse)
    df1 %>%
      dplyr::mutate(
        Linear    = poly(x = Y, degree = 3, raw = TRUE)[ ,1]
      , Quadratic = poly(x = Y, degree = 3, raw = TRUE)[ ,2]  
      , Cubic     = poly(x = Y, degree = 3, raw = TRUE)[ ,3]
        )
    

    我想知道是否有这样一种简洁的方法

    df1 %>%
      dplyr::mutate(poly(x = Y, degree = 3, raw = TRUE))
    

    谢谢

    2 回复  |  直到 6 年前
        1
  •  7
  •   acylam    6 年前

    不完全是你所希望的,但足够接近。我首先转换 poly !!! 拼接列(将list/data.frame的每个元素转换为自己的参数)。 setNames

    library(dplyr)
    
    df1 %>%
      mutate(!!!as.data.frame(poly(x = .$Y, degree = 3, raw = TRUE))) %>%
      setNames(c("Y", "Linear", "Quadratic", "Cubic"))
    

    结果:

        Y Linear Quadratic Cubic
    1   4      4        16    64
    2   4      4        16    64
    3   4      4        16    64
    4   4      4        16    64
    5   4      4        16    64
    6   8      8        64   512
    7   8      8        64   512
    8   8      8        64   512
    9   8      8        64   512
    10  8      8        64   512
    11 16     16       256  4096
    12 16     16       256  4096
    13 16     16       256  4096
    14 16     16       256  4096
    15 16     16       256  4096
    16 32     32      1024 32768
    17 32     32      1024 32768
    18 32     32      1024 32768
    19 32     32      1024 32768
    20 32     32      1024 32768
    ...
    
        2
  •  2
  •   zack    6 年前

    另一个选择,尽管我非常喜欢@useR的解决方案:

    df1 %>%
      left_join(data.frame(Y = unique(.$Y), poly(unique(.$Y), degree = 3, raw = TRUE)),
                by = c('Y' = 'Y')) %>% 
      setNames(c('Y', 'Linear', 'Quadratic', 'Cubic'))
    
        Y Linear Quadratic Cubic
    1   4      4        16    64
    2   4      4        16    64
    3   4      4        16    64
    4   4      4        16    64
    5   4      4        16    64
    6   8      8        64   512
    7   8      8        64   512
    8   8      8        64   512
    9   8      8        64   512
    10  8      8        64   512
    11 16     16       256  4096
    12 16     16       256  4096
    13 16     16       256  4096
    14 16     16       256  4096
    15 16     16       256  4096
    16 32     32      1024 32768
    17 32     32      1024 32768
    18 32     32      1024 32768
    19 32     32      1024 32768
    20 32     32      1024 32768