在几个数据帧中从大写变为小写

时间:2018-09-25 10:30:23

标签: r

在环境中,我试图将每个数据框中的列名大小写从大写改为小写。我使用lapply失败。

df1 <- data.frame(COL1 = 1, COL2 = "test")
df2 <- data.frame(COLL = 10, COLL1 = "test")
df3 <- data.frame(COLLA = 25, COLLA1 = "test")
df4 <- data.frame(COLLAC= "dummy", COLLAC1 = "test")

dfList <- c("df1", "df2", "df3", "df4")

lapply(dfList, function (x){
  names(x) <- tolower(names(x))
})

我做错了什么?

3 个答案:

答案 0 :(得分:2)

您的列表不包含您的data.frames。列表以list()而不是c()开头。这是一个工作示例:

df1 <- data.frame(COL1 = 1, COL2 = "test")
df2 <- data.frame(COLL = 10, COLL1 = "test")
df3 <- data.frame(COLLA = 25, COLLA1 = "test")
df4 <- data.frame(COLLAC= "dummy", COLLAC1 = "test")

dfList <- list(df1, df2, df3, df4)

dfList <- lapply(dfList, function (x){
  names(x) <- tolower(names(x))
  return(x)
})

> dfList
[[1]]
  col1 col2
1    1 test

[[2]]
  coll coll1
1   10  test

[[3]]
  colla colla1
1    25   test

[[4]]
  collac collac1
1  dummy    test

names(dfList) <- paste0("df", 1:4)
list2env(dfList, .GlobalEnv)

答案 1 :(得分:1)

由于您希望将所有数据帧都保留在全局环境中,因此在这种情况下,我希望使用for循环。这使您可以在全局环境中进行操作(lapply要求您将某些东西返回到全局环境中。)

dfList <- c("df1", "df2", "df3", "df4")
for (i in dfList){
  tmp <- get(i)
  assign(i, setNames(tmp, tolower(names(tmp))))
}

答案 2 :(得分:1)

其他答案很好用,但这是另一个选择。每当我想清理列名时,我总是转向janitor包。有很多选项可以使用该软件包清除名称。 https://cran.r-project.org/web/packages/janitor/janitor.pdf

library(purrr)
library(janitor)

list(df1, df2, df3, df4) %>% 
  map(janitor::clean_names)
#> [[1]]
#>   col1 col2
#> 1    1 test
#> 
#> [[2]]
#>   coll coll1
#> 1   10  test
#> 
#> [[3]]
#>   colla colla1
#> 1    25   test
#> 
#> [[4]]
#>   collac collac1
#> 1  dummy    test