[英]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.