在R中重命名标头

时间:2014-03-13 17:54:15

标签: r

我想重命名四个数据帧的标题(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]

我哪里错了?

2 个答案:

答案 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)
}