【问题标题】:How to apply a function iteratively over a single dataframe in R?如何在 R 中的单个数据帧上迭代地应用函数?
【发布时间】:2022-01-04 21:38:54
【问题描述】:

我正在尝试将此操作转换为可以设置n 参数且不使用for loop 的函数。这个例子是3次。我想我可以用 purrr::reduce 来做,但它需要一个列表 (?)。

tibble::add_row(tibble::add_row(tibble::add_row(df, .before = 1), .before = 1), .before = 1)

【问题讨论】:

    标签: r reduce purrr


    【解决方案1】:
    reduce(rep(list(add_row), 3), ~.y(.x, .before = 1), .init =df)
    
       x  y
    1 NA NA
    2 NA NA
    3 NA NA
    4  1  3
    5  2  4
    

    【讨论】:

      【解决方案2】:
      library(tidyverse)
      
      add_row_n <- function(df, n) {
        walk(1:n, ~ {df <<- add_row(df, .before = 1)})
        df
      }
      
      tibble() %>% 
        add_row_n(3)
      #> # A tibble: 3 × 0
      
      tibble(x = 1, y = 2) %>% 
        add_row_n(3)
      #> # A tibble: 4 × 2
      #>       x     y
      #>   <dbl> <dbl>
      #> 1    NA    NA
      #> 2    NA    NA
      #> 3    NA    NA
      #> 4     1     2
      

      reprex package (v2.0.1) 于 2021 年 11 月 26 日创建

      【讨论】:

        【解决方案3】:

        怎么样

        add_n_rows = function(df, n) {
            
            new.rows = as.data.frame(matrix(NA, nrow=n, ncol=ncol(df)))
            colnames(new.rows) <- colnames(df)
            
            df %>% add_row(new.rows, .before = 1)        
        }
        
        # test
        df = data.frame(x = rnorm(10), y = rnorm(10))
        add_n_rows(df, 3)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-05-13
          • 2022-01-17
          • 2021-03-09
          • 1970-01-01
          • 2018-03-27
          • 2019-05-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多