Поскольку это tbl_df
, мы можем использовать tidyverse
подходы, т.е. l oop над list
с map
, создать столбец «Ключ», unite
, используя соответствующие столбцы, указав при этом remove = FALSE
(если эти столбцы больше не нужны, по умолчанию это remove = TRUE
)
library(dplyr)
library(purrr)
library(tidyr)
list_of_sheets2 <- list_of_sheets %>%
map(~ .x %>%
unite(Key, `JDE Branch Plant`,
`Long Item Code`, `Market Section`, remove = FALSE, sep=""))
В коде ОП проблема заключается в том, что он просто paste
имена столбцов вместо значений в этих столбцах. Мы можем извлечь столбцы каждого набора данных с помощью [[
for (i in seq_along(list_of_sheets)) {
list_of_sheets[[i]]$Key <- paste0( list_of_sheets[[i]][["JDE Branch Plan"]],
list_of_sheets[[i]][["Long Item Code"]],
list_of_sheets[[i]][["Market Section"]])
}
Или его можно сделать немного короче с помощью with
for (i in seq_along(list_of_sheets)) {
list_of_sheets[[i]]$Key <-
with(list_of_sheets[[i]], paste0(`JDE Branch Plant`,
`Long Item Code`, `Market Section`))
}
ОП также пробовал с mapply
и имел такую же проблему. В этом случае нам не нужно mapply
, поскольку Map/mapply
используются для преобразований с соответствующими элементами. Здесь каждый элемент list
имеет одинаковый столбец и нуждается в преобразовании для тех же столбцов. Вместо этого это можно сделать с помощью lapply
list_of_sheets2 <- lapply(list_of_sheets, transform,
Key = paste0(`JDE Branch Plant`, `Long Item Code`, `Market Section`))