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