命名列表中的数据帧列

时间:2014-07-29 00:06:23

标签: r list apply lapply

我正在尝试使用lapply函数命名列表中的数据框。

我有一个2个数据框的列表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"

1 个答案:

答案 0 :(得分:4)

你快到了那里:

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(感谢Ananda Mahto)

library(data.table)
lapply(l, setnames, letters[1:2])

使用此方法不会复制data.frame。适用于BIG data.frame s。