向 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)))
我有一个 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)))