我想重命名四个数据帧的标题(dw,ds,dmw,dne)。他们都有六列。
regions <- c("dw","ds","dmw","dne")
for (i in regions){
names(i)=c("lon","lat","area","fd","tp","rt")
}
但是我收到了这个错误:
Error in names(i) = c("lon", "lat", "area", "fd", "tp", "rt") :
'names' attribute [6] must be the same length as the vector [1]
我哪里错了?
答案 0 :(得分:1)
我认为这更像是使用列表来解决这个问题的方法。将数据存储在列表中会使您的生活更轻松(大多数情况下),特别是当您想要对单个元素进行重复操作时(在本例中为data.frame
s)。在这里,我使用lapply
,因为您希望以一致的方式更改名称,但使用mapply
,您可以使用不同的名称单独更改每个data.frame
。
首先创建一些你应该做的数据 - 我认为你已经分配到了全球环境。
dw <- mtcars[1:4, 1:6]
ds <- mtcars[1:4, 1:6]
dmw <- mtcars[1:4, 1:6]
dne <- mtcars[1:4, 1:6]
现在将所有善良包装成一个列表(或者更好的是,如果可以的话,将其读入/创建为列表)
lst <- list(dw, ds, dmw, dne)
## name the list
names(lst) <- c("dw","ds","dmw","dne")
## Now we can use lapply to add the column names
(out <- lapply(lst, function(x) {
setNames(x, nm = c("lon","lat","area","fd","tp","rt"))
}))
我将继续操作列表并使用索引操作列表中的单个元素/对象(请参阅out[["dw"]]
给出的内容)。如果您真的想重新分配到全球环境,请使用list2env
:
list2env(out, envir = .GlobalEnv)
dne
答案 1 :(得分:0)
改为使用colnames
并使用get
来引用变量:
for (i in regions){
dat <- get(i)
colnames(dat) <- c("lon","lat","area","fd","tp","rt")
assign(i, dat)
}