Именование столбцов фреймов данных в списке
Вопрос
Я пытаюсь использовать lapply
функция для именования кадров данных в списке.
У меня есть список, l
, из двух фреймов данных, каждый из которых содержит по два столбца.Я хотел бы назвать столбцы двух фреймов данных одинаково:для первого столбца, "a"
и для второго столбца "b"
.Я думал, lapply
функция поможет мне сделать это;однако это не сработало так, как ожидалось (возможно, я использую его неправильно).Кажется, что lapply
всегда будет выдавать некоторый результат и не может использоваться для назначения (по крайней мере, так, как я его использую).
l <- list(df1 = as.data.frame(replicate(2, rnorm(5))),
df2 = as.data.frame(replicate(2, runif(5))))
lapply(l, function(x) colnames(x) <- letters[1:2])
$df1
[1] "a" "b"
$df2
[1] "a" "b"
Решение
Вы были почти там:
l <- list(df1 = as.data.frame(replicate(2, rnorm(5))),
df2 = as.data.frame(replicate(2, runif(5))))
lapply(l, function(x) {
colnames(x) <- letters[1:2]
x
})
Вы должны вернуть data.frame
x
Сформируйте комментарий @thelatemail, действительно элегантное решение:
lapply(l, setNames, letters[1:2])
С использованием setnames
из data.table
пакет (спасибо Ананде Махто)
library(data.table)
lapply(l, setnames, letters[1:2])
Используя этот подход, data.frame
s не копируются.Полезно для БОЛЬШИХ data.frame
с.