向 data.frame 列表中的每个 data.frame 添加新列

Add new column to each data.frame in list of data.frames

我有一个 data.frames 的列表,想使用 R 包插入符号在每个 data.frame、folds 中创建一个新列。到目前为止,我尝试编写一个自定义函数,然后使用 map 将其应用于我的列表。如有任何建议,我们将不胜感激。

library(caret)

one = airquality[1:10,]
two = airquality[11:20,]
listdf <- list(one, two)

foldfunc <- function(x) {
  folds <- createFolds(1:nrow(x), k=10,list = F)
  x$folds <- folds
}

map(listdf, foldfunc)

您只需要让函数 return 成为数据框:

foldfunc <- function(x) {
  folds <- createFolds(1:nrow(x), k=10,list = F)
  x$folds <- folds
  return(x)
}

在您的代码中,您的函数是 returning folds。由于您没有明确说明 return 的内容,该函数假定所需结果是它计算的最后一个结果,这就是您接收数值向量的原因(折叠由 createFolds 计算)。

如果您尝试 print(foldfunc(listdf[[1]])) 使用您的函数,您将看到:

print(foldfunc(listdf[[1]]))
# [1]  1  2  3  4  5  6  7  8  9 10

在新版本中,将提供一个包含 folds 列的数据框。

使用tidyverse

library(dplyr)
library(purrr)
listdf <- map(listdf, ~ .x %>% 
     mutate(folds = createFolds(row_number(), k = 10, list = FALSE)))