簡體   English   中英

循環遍歷數據框列表並重命名 R 中的列名

[英]Loop over list of data frames and rename column names In R

我確實想遍歷我擁有的數據框列表並重命名列名。 這是數據框的示例,

dput(df)
df1 <- structure(list(v1..x = c("Silva", "Brandon", "Mango"),
               t2.v = c("James","Jane", "Egg")),
          class = "data.frame", row.names = c(NA,  -3L))

dput(df2)
df2 <- structure(list(v1..x = c("Silva", "Brandon", "Mango"),
               t2.r = c("James","Jane", "Egg")),
          class = "data.frame", row.names = c(NA,  -3L))
dput(df3)
df3 <- structure(list(v1..x = c("Silva", "Brandon", "Mango"),
               t2.v = c("James","Jane", "Egg"),
               d3...c = c("James","Jane", "Egg")),
          class = "data.frame", row.names = c(NA,  -3L))

我想遍歷這個數據框的列表並重命名這些列。 我有一個要替換的列列表,我確實喜歡使用setnames以便跳過缺少的列,以防它在數據框中找到一個列。這是我嘗試過的,但只更改了第一列

lst_df <- list(df1,df2,df3)
oldnames<- c('v1..x','t2.v','d3...c')
newnames <- c('v1','t2_v','d3')
lst <- lapply(lst_df, function(x) setNames(x, gsub(oldnames, newnames, names(x))) )

注意某些數據框中的列可能長度不同。請幫助

在這種情況下, data.table可能會派上用場。 它的setnames function 比setNames更靈活。

library(data.table)
oldnames<- c('v1..x','t2.v','d3...c')
newnames <- c('v1','t2_v','d3')

# convert df-s to data.table
lapply(lst_df, setDT)
# setnames function from data.table is quite flexible
lapply(lst_df, setnames, oldnames, newnames, skip_absent = TRUE)

考慮到這只會改變完全匹配。 如果您想更改這些字符串模式,最簡單的方法可能是運行 for 並使用正則表達式。

暫無
暫無

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

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