簡體   English   中英

R - 循環遍歷數據集並更改列名稱

[英]R - Looping through datasets and change column names

我試圖遍歷一堆數據集並更改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 = ""));
}

但是,由於我是文本格式,因此上面的代碼不起作用。 我考慮過分配功能,但似乎也不適合。 如果有任何想法我會很感激。

像這樣的東西:

list2env(lapply(mget(name.list),function(dat){
  colnames(dat) <- paste(nn,colnames(dat),sep='_')
  dat
}),.GlobalEnv)
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

這里有一些免費數據:

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

你也可以通過將abc放入他們自己的環境(甚至列表)來避免getmget 如果你走這條路線你也不需要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 )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM