簡體   English   中英

如何在 R 循環中更改列名?

[英]How to change column names while in a loop in R?

for(i in 1:3){
  
  names <- c("n1","n2","n3")
  assign(paste0("mydf",i), data.frame(matrix("", nrow = 3, ncol = 3)))
  
}

我嘗試了下面顯示的代碼,但它不起作用。

for(i in 1:3){
  
  names <- c("n1","n2","n3")
  assign(paste0("mydf",i), names(data.frame(matrix("", nrow = 3, ncol = 3)))[1:3] <- names)
  
}

你的解決方案是什么? 提前致謝。

這是我會采取的方法。 以下腳本不僅更改了列名,而且還在全局環境中創建了 3 個數據框,類似於您的原始腳本。

for (i in 1:3){
  noms <- c("n1","n2","n3") # create the names in order the columns appear in the dataframe
  
  df_ <- data.frame(matrix("", nrow = 3, ncol = 3)) # create the dataframe
  
  df_nom <- paste("mydf", i, sep = "") # create the dataframe name
  
  colnames(df_) <- noms # assign the names to the columns
  
  assign(df_nom, df_) # rename the dataframe
}

1)通常將數據框放在一個列表中,但如果您真的想將它們放入當前環境中,請執行以下操作。 如果你想要全局環境,那么用e <-.GlobalEnv替換第一行,或者如果你想創建一個列表(首選),那么使用e <- list()代替。

# define 3 data frames
e <- environment()  # or e <- .GlobalEnv or e <- list()
nms <- paste0("mydf", 1:3)
for(nm in nms) e[[nm]] <- data.frame(matrix("", 3, 3))

# change their column names
for(nm in nms) names(e[[nm]]) <- c("n1", "n2", "n3")

2)如果我們想要列表更好的是:

L <- Map(function(x) data.frame(matrix("", 3, 3)), paste0("mydf", 1:3))
L[] <- lapply(L, `names<-`, c("n1", "n2", "n3"))  # change col names

轉換

請注意,我們可以使用其中一種將列表 L 轉換為環境中松散的數據幀,具體取決於您要將列表組件放入的環境。

list2env(L, environment())
list2env(L, .GlobalEnv)

我們可以 go 使用 where e is environment().GlobalEnv ,這取決於我們的需要。 我們可以省略 e 參數是數據幀在當前環境中。

L <- mget(nms, e)

您可以使用get名稱獲取data.frame ,更新names並將其assign回去。

nNames <- c("n1","n2","n3")
for(i in 1:3) {
  D <- paste0("mydf",i)
  tt <- get(D)
  names(tt) <- nNames
  assign(D, tt)
}
names(mydf1)
#[1] "n1" "n2" "n3"

或者,可以在使用dimnames創建matrix時設置名稱:

nNames <- c("n1","n2","n3")
for(i in 1:3) {
    assign(paste0("mydf", i),
           data.frame(matrix("", 3, 3, dimnames=list(NULL, nNames))))
}
names(mydf1)
#[1] "n1" "n2" "n3"

暫無
暫無

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

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