将列名称转换为小写,同时堆叠以不同大小写样式存储的数据对象

时间:2017-07-31 18:41:07

标签: r

我有几个数据对象嵌套在一个巨大的对象中,我需要使用rbind进行堆叠。但是,在堆叠这些之前,我需要将列名称转换为小写,一旦数据对象以不同的大小写样式存储。我怎么能做到这一点?

玩具数据

   df <- list(structure(list(a = 1:3, x = c(-1.99, -1.11, -0.34), y = c("C", "B", "A")), .Names = c("a", "x", 
"y"), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-3L)), structure(list(a = 1:3, x = c(-0.44, -1.07, 
-0.23)), .Names = c("A", "x"), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -3L)), structure(list(
    a = 1:3, x = c(-0.62, -0.60, -0.06
    ), y = c(3L, 2L, 1L)), .Names = c("a", "X", "y"), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -3L)))


lapply(df, names)

rbind

data.table::rbindlist(df, fill=TRUE, idcol = TRUE)

2 个答案:

答案 0 :(得分:0)

设计一个函数并使用lapply将该函数应用于所有数据框。这会将所有列名更改为小写。

colname_fun <- function(dt){
  dt <- setNames(dt, tolower(names(dt)))
  return(dt)
}

lapply(df, colname_fun)

答案 1 :(得分:0)

以下是使用lapply的解决方案。但是,它会创建原始列表的副本。

df_lower <- lapply(df, function(x) setNames(x, tolower(names(x))))