R - 循环遍历数据集并更改列名称

时间:2014-09-21 00:03:31

标签: r

我正在尝试遍历一堆数据集并更改R中的列。 我有一堆数据集,比如a,b,c等,它们都有三列,比如X,Y,Z. 我想将其名称更改为数据集a的a_X,a_Y,a_Z,以及数据集b的b_X,b_Y,b_Z,依此类推。

这是我的代码:

name.list = ("a","b","c")
for(i in name.list){
    names(i) = c(paste(i,"_X",sep = ""),paste(i,"_Y",sep = ""),paste(i,"_Y",sep = ""));
}

但是,上面的代码不起作用,因为我是文本格式。 我考虑过分配功能,但似乎也不合适。 如果有任何想法,我将不胜感激。

3 个答案:

答案 0 :(得分:3)

这样的事情:

list2env(lapply(mget(name.list),function(dat){
  colnames(dat) <- paste(nn,colnames(dat),sep='_')
  dat
}),.GlobalEnv)

答案 1 :(得分:2)

for ( i in name.list) { 
         assign(i, setNames( get(i), paste(i, names(get(i)), sep="_")))
                       }

> a
  a_X a_Y a_Z
1   1   3   A
2   2   4   B
> b
  b_X b_Y b_Z
1   1   3   A
2   2   4   B
> c
  c_X c_Y c_Z
1   1   3   A
2   2   4   B

答案 2 :(得分:2)

以下是一些免费数据:

a <- data.frame(X = 1, Y = 2, Z = 3) 
b <- data.frame(X = 4, Y = 5, Z = 6)
c <- data.frame(X = 7, Y = 8, Z = 9)

这是一种使用mget和自定义函数foo

的方法
name.list <- c("a", "b", "c")
foo <- function(x, i) setNames(x, paste(name.list[i], names(x), sep = "_"))
list2env(Map(foo, mget(name.list), seq_along(name.list)), .GlobalEnv)
a
#   a_X a_Y a_Z
# 1   1   2   3
b
#   b_X b_Y b_Z
# 1   4   5   6
c
#   c_X c_Y c_Z
# 1   7   8   9

您还可以将getmgeta放入自己的环境(甚至列表)中,以避免bc。如果你走这条路线,你也不需要name.list向量,因为它与ls(e)

相同
e <- new.env()
e$a <- a; e$b <- b; e$c <- c
bar <- function(x, y) setNames(x, paste(y, names(x), sep = "_"))
list2env(Map(bar, as.list(e), ls(e)), .GlobalEnv)

这样做的另一个好处是你仍然拥有环境e中未触及的数据框。没有任何内容被覆盖(请检查ae$a)。