我有一个从Excel文件中提取的数据框列表。 Excel文件具有时髦的格式,真正的列名称是数据框的第一行。该列表包含9个数据框,这些数据框未按顺序命名,并且基于Excel文件的选项卡名称。
这是我到目前为止所做的:
for(i in all_list){
tmp <- get(i)
colnames(tmp) <- unlist(get(i)[1,])
assign(i, tmp)
}
R给我一个错误:
Error in get(i) : invalid first argument
以下是我的数据框列表结构示例:
str(all_list)
List of 9
$ Retail :'data.frame': 306 obs. of 25 variables:
$ X__1 : chr [1:306] NA NA "VARIABLE" "VARIABLE" ...
$ X__2 : chr [1:306] "TIME PERIOD" NA "41640" "41671" ...
正如您所看到的,列表中第一个元素(Retail)中的列名称包含&#34; X __#&#34;格式。有没有一种明确的方法可以在这个列表的一个循环中重新格式化?谢谢。
答案 0 :(得分:2)
您可以使用lapply
遍历列表中的每个data.frame来设置第一行的列名。在返回data.frame之前删除第一行。例如:
ll <- list(df1,df2,df3,df4)
lapply(ll, function(x){
names(x) <- x[1,]
x[-1,]})
#[[1]] df1
# g x <-- 1st row has been set as column name.
#2 j z
#3 n p
#4 u o
#5 e b
示例数据:
set.seed(1)
df1 <- data.frame(First = sample(letters, 5), Second = sample(letters, 5),
stringsAsFactors = FALSE)
df2 <- data.frame(First = sample(letters, 5), Second = sample(letters, 5),
stringsAsFactors = FALSE)
df3 <- data.frame(First = sample(letters, 5), Second = sample(letters, 5),
stringsAsFactors = FALSE)
df4 <- data.frame(First = sample(letters, 5), Second = sample(letters, 5),
stringsAsFactors = FALSE)
df1
# First Second
# 1 g x
# 2 j z
# 3 n p
# 4 u o
# 5 e b