我有data.frames列表。
> LoDFs <- list(data.frame(y1=c(1,2,3), y2=c(4,5,6)), data.frame(yA=c(1,2,3), yB=c(4,5,6)))
> LoDFs
[[1]]
y1 y2
1 1 4
2 2 5
3 3 6
[[2]]
yA yB
1 1 4
2 2 5
3 3 6
Here我发现如何使用lapply
函数分别操作每个data.frame。我的目标是更改特定data.frame中的列名称(两个data.frames应该有第一列名为A
和第二列B
)。我试过以下:
> col.names <- c("A", "B")
> lapply(seq_along(LoDFs), function(x) {colnames(LoDFs[[x]]) <- col.names})
[[1]]
[1] "A" "B"
[[2]]
[1] "A" "B"
但它只返回修改并且不影响特定的data.frame:
> LoDFs
[[1]]
y1 y2
1 1 4
2 2 5
3 3 6
[[2]]
yA yB
1 1 4
2 2 5
3 3 6
如何保存*应用函数族对数据所做的修改?
答案 0 :(得分:1)
lapply(LoDFs, 'names<-', c("A", "B"))
[[1]]
A B
1 1 4
2 2 5
3 3 6
[[2]]
A B
1 1 4
2 2 5
3 3 6
答案 1 :(得分:1)
另一个选项是setNames
lapply(LoDFs, setNames, c('A', 'B'))
# [[1]]
# A B
#1 1 4
#2 2 5
#3 3 6
#[[2]]
# A B
#1 1 4
#2 2 5
#3 3 6
如果我们需要进行适当修改,我们可以使用%<>%
中的magrittr
运算符。
library(magrittr)
LoDFs %<>%
lapply(., setNames, c("A", "B"))
sapply(LoDFs, names)
# [,1] [,2]
#[1,] "A" "A"
#[2,] "B" "B"