我有这样一个列表(list1),每个元素都是一个由一列组成的数据框。
所有columsn名称相同" x"。我想将列名更改为" x1"," x2",....," xn"。
我使用下面的代码:
lapply(list1, function(x) setNames(x, "x",paste("x",1:seq_along(list1))))
但是,此代码不起作用。为什么这段代码不起作用?我会很高兴得到任何帮助。非常感谢。
@ David Arenburg,我编写了如下代码(10是list1中的元素编号):
lapply(list1, function(z) setNames(z,paste0("x",1:10)))
此代码不会给出任何错误,但它也不会更改列名。列名仍为#34; x"。
我编辑了如下,但它仍然无法正常工作。
for(i in 1:10)
{
list2[[i]]<-setNames(data.frame(list1[[i]])[,1], paste0("x",1:10)[i])
}
我暂时删除了seq_along
。在获得理想的结果后,我会继续努力。
list1的每个元素都是一个数据框,每个数据框只有一列。
答案 0 :(得分:1)
如果要更改列表的多个数据框中每列的名称,则应执行以下操作:
# Artificial list with each data frame containing columns with values from 1 to 3
list1 = list(data.frame(x = 1:3), data.frame(x = 1:3), data.frame(x = 1:3),
data.frame(x = 1:3), data.frame(x = 1:3), data.frame(x = 1:3),
data.frame(x = 1:3), data.frame(x = 1:3), data.frame(x = 1:3),
data.frame(x = 1:3))
# Assigning column names of individual data frames
for(i in 1:length(list1)){
colnames(list1[[i]]) = paste("x",i, sep = "")
}
我创建了一个包含多个数据框的列表,每个数据框都包含相同的列x。由于您要更改数据框中列的名称,因此在setNames()
中为每个单独的数据框分配多个值将无济于事。因此,您必须将x与单个值(从列表的1到长度)粘贴到各个数据框的列名称。