这些问题:
Changing Column Names in a List of Data Frames in R
Changing names in a list of dataframes
两者都可以更改列名,但是我要更改的唯一列名是第一列。我列表中的数据框只有第一列相同。
这是我遇到的问题的可复制示例:
df1 <- data.frame(A = 1:5, B = 1:5)
df2 <- data.frame(A = 11:15, B = 21:25)
ldf <- list(df1, df2)
ldf <- lapply(ldf, setNames, "State")
L
[[1]]
State NA
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
[[2]]
State NA
1 11 21
2 12 22
3 13 23
4 14 24
5 15 25
我如何在lapply中指定一列,而其余部分不予处理?
答案 0 :(得分:3)
我们可以像这样使用lapply
:
lapply(ldf, function(x) {names(x)[1] <- "State";x})
#[[1]]
# State B
#1 1 1
#2 2 2
#3 3 3
#4 4 4
#5 5 5
#[[2]]
# State B
#1 11 21
#2 12 22
#3 13 23
#4 14 24
#5 15 25
答案 1 :(得分:2)
我们可以使用rename_at
library(purrr)
library(dplyr)
map(ldf, ~ .x %>%
rename_at(1, ~ "State"))
#[[1]]
# State B
#1 1 1
#2 2 2
#3 3 3
#4 4 4
#5 5 5
#[[2]]
# State B
#1 11 21
#2 12 22
#3 13 23
#4 14 24
#5 15 25
或与select
map(ldf, ~ .x %>%
select(State = 1, everything()))
或使用setnames
中的data.table
library(data.table)
lapply(ldf, setnames, old = 1, new = 'State')
ldf
#[[1]]
# State B
#1 1 1
#2 2 2
#3 3 3
#4 4 4
#5 5 5
#[[2]]
# State B
#1 11 21
#2 12 22
#3 13 23
#4 14 24
#5 15 25
或使用base R
lapply(ldf, setNames, c("State", names(ldf[[1]][-1])))