如何在 R 中的单个数据帧上迭代地应用函数?

Posted

技术标签:

【中文标题】如何在 R 中的单个数据帧上迭代地应用函数?【英文标题】:How to apply a function iteratively over a single dataframe in 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)

【问题讨论】:

【参考方案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)

【讨论】:

以上是关于如何在 R 中的单个数据帧上迭代地应用函数?的主要内容,如果未能解决你的问题,请参考以下文章

在数据帧上迭代 re.split()

如何在熊猫数据帧上迭代 TfidfVectorizer()

如何在 R 中迭代以同时保存多个文件并避免“absolute_path(target) 中的错误:'x' 必须是单个字符串”?

如何在 R 中迭代地过滤列表中的列表或如何同时使用两个条件过滤 data.table,在运行时创建对象

如何在聚合的 pandas 数据帧上运行多个函数

如何迭代地将参数传递给 R 函数