簡體   English   中英

重命名循環R中的列

[英]Renaming columns in a loop R

我試圖在循環中搜索如何重命名多個數據幀的列,但我找不到一個有凝聚力的答案。 假設我有4個數據幀,每個數據幀有2列。 我想在所有4個數據幀中將每個y1列重命名為“number”,並將每個y2列重命名為“value”。 我知道我可以通過創建列表來實現這一點,但我想直接為該數據幀更改列的名稱,而不是作為數據幀列表值(如df_list [[1]])。 當我使用這段代碼時,我得到了那種結果:

df_list <- list(d1, d2, d3, d4)

for (i in 1:length(df_list)){
  colnames(df_list[[i]]) <- c("number", "value")
}

數據框:

d1 <- data.frame(y1 = c(1, 2, 3), y2 = c(4, 5, 6))
d2 <- data.frame(y1 = c(3, 2, 1), y2 = c(6, 5, 4))
d3 <- data.frame(y1 = c(1, 2, 3), y2 = c(4, 5, 6))
d4 <- data.frame(y1 = c(3, 2, 1), y2 = c(6, 5, 4))

最簡單的是setNames

lapply(df_list, setNames, c("number", "value"))

正如@Parfait所提到的,最好在list包含對象而不是在全局環境中更改對象,但如果list名稱也是對象名稱,則可以完成

list2env(lapply(mget(paste0("d", 1:4)), setNames, 
         c("number", "value")), envir = .GlobalEnv)
names(d1)
#[1] "number" "value" 

或者使用for循環

for(nm in paste0("d", 1:4)) assign(nm, `names<-`(get(nm), c("number", "value")))

暫無
暫無

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

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