У меня есть список, который содержит несколько фреймов данных. Я хочу войти в каждый фрейм данных в списке, выполнить операцию, которая создаст новый список для каждой строки во фреймах данных, а затем добавить новый столбец в каждый фрейм данных, содержащий новые списки.
Вот игрушечный пример. Я начинаю с ls_original
:
ls_original <- list(
a = data.frame(id = 1:2, name = c("Jon", "Mark")),
b = data.frame(id = 3:6, name = c("Matt", "Marc", "Luke", "John"))
)
и пытаюсь сгенерировать ls_desired
:
ls_desired <- list(
a = data.frame(
id = 1:2,
name = c("Jon", "Mark"),
lets = I(list(letters[1:1], letters[1:2]))
),
b = data.frame(
id = 3:6,
name = c("Matt", "Marc", "Luke", "John"),
lets = I(list(letters[1:3], letters[1:4], letters[1:5], letters[1:6]))
)
)
Я хотел бы написать функцию, которая преобразует ls_original
в ls_desired
:
ls_desired <- list_mutate_function(ls_original)
Я пробовал функции ниже. Они дают новые данные, которые необходимо добавить к ls_original
для генерации ls_desired
, но я не могу понять, как объединить ls_failed
с ls_original
для генерации ls_desired
.
ls_failed1 <- ls_original %>%
lapply(function(x) {
apply(x, 1, function(y) {
letters[1:y[["id"]]]
})
})
ls_failed1
library(plyr)
ls_failed2 <- ls_original %>%
plyr::llply(function(x) {
apply(x, 1, function(y) {
letters[1:y[["id"]]]
})
})
ls_failed2
Я тоже пытался lplyr::mutate
безрезультатно. Спасибо.