重命名列表中每个数据框的 headers
Renaming the headers of every data frame in a list
我有一个包含多个数据框的列表,所有数据框的列数都相同。
例如,对于包含两个数据框的列表 df_list
,df1
和 df2
:
>df_list
df1
a b c
1 1 1
2 2 2
3 3 3
df2
a b c
3 2 1
3 2 1
3 2 1
我想将每个数据框的 headers 重命名为 new_headings <- c("A", "B", "C")
。
我构建了一个for循环:
for (i in 1:length(list)) {
names(list[[i]]) <- new_headings
}
但是,这不起作用。标题保持原样。如果我单独而不是循环执行它,它工作正常,但是,例如,names(list[[1]]) <- new_headings
适当地更改标题。
我的实际列表很长,有很多数据框。谁能解释为什么这不起作用或我可以使用其他什么方法?谢谢。
我们可以使用 Map
和 setNames
df_listNew <- Map(setNames, df_list, list(new_headings))
或使用lapply
lapply(df_list, setNames, new_headings)
#$df1
# A B C
#1 1 1 1
#2 2 2 2
#3 3 3 3
#$df2
# A B C
#1 3 2 1
#2 3 2 1
#3 3 2 1
数据
df_list <- list(df1 = structure(list(a = 1:3, b = 1:3, c = 1:3),
class = "data.frame", row.names = c(NA,
-3L)), df2 = structure(list(a = c(3, 3, 3), b = c(2, 2, 2), c = c(1,
1, 1)), class = "data.frame", row.names = c(NA, -3L)))
你可以使用两个for循环
a<-c(1,2,3)
b<-c(1,2,3)
c<-c(1,2,3)
df1<-as.data.frame(cbind(a,b,c))
a<-c(3,2,1)
b<-c(3,2,1)
c<-c(3,2,1)
df2<-as.data.frame(cbind(a,b,c))
df_list<-list(df1,df2)
new_headings <- c("A", "B", "C")
for (i in 1:length(df_list)) {
for (j in 1:length(df_list[[i]])) {
colnames(df_list[[i]])[j] <- new_headings[j]
}
}
df_list
我有一个包含多个数据框的列表,所有数据框的列数都相同。
例如,对于包含两个数据框的列表 df_list
,df1
和 df2
:
>df_list
df1
a b c
1 1 1
2 2 2
3 3 3
df2
a b c
3 2 1
3 2 1
3 2 1
我想将每个数据框的 headers 重命名为 new_headings <- c("A", "B", "C")
。
我构建了一个for循环:
for (i in 1:length(list)) {
names(list[[i]]) <- new_headings
}
但是,这不起作用。标题保持原样。如果我单独而不是循环执行它,它工作正常,但是,例如,names(list[[1]]) <- new_headings
适当地更改标题。
我的实际列表很长,有很多数据框。谁能解释为什么这不起作用或我可以使用其他什么方法?谢谢。
我们可以使用 Map
和 setNames
df_listNew <- Map(setNames, df_list, list(new_headings))
或使用lapply
lapply(df_list, setNames, new_headings)
#$df1
# A B C
#1 1 1 1
#2 2 2 2
#3 3 3 3
#$df2
# A B C
#1 3 2 1
#2 3 2 1
#3 3 2 1
数据
df_list <- list(df1 = structure(list(a = 1:3, b = 1:3, c = 1:3),
class = "data.frame", row.names = c(NA,
-3L)), df2 = structure(list(a = c(3, 3, 3), b = c(2, 2, 2), c = c(1,
1, 1)), class = "data.frame", row.names = c(NA, -3L)))
你可以使用两个for循环
a<-c(1,2,3)
b<-c(1,2,3)
c<-c(1,2,3)
df1<-as.data.frame(cbind(a,b,c))
a<-c(3,2,1)
b<-c(3,2,1)
c<-c(3,2,1)
df2<-as.data.frame(cbind(a,b,c))
df_list<-list(df1,df2)
new_headings <- c("A", "B", "C")
for (i in 1:length(df_list)) {
for (j in 1:length(df_list[[i]])) {
colnames(df_list[[i]])[j] <- new_headings[j]
}
}
df_list