【问题标题】:Changing from upper to lower case in several data frames在几个数据帧中从大写变为小写
【发布时间】:2018-09-25 21:38:55
【问题描述】:

我在环境中有几个数据框,我试图将每个数据框中的列名的大小写从大写更改为小写。我正在使用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))
})

我做错了什么?

【问题讨论】:

  • return(x) 添加到lapply
  • 我应该在哪里添加return(x)?功能后?谢谢。
  • 作为函数的最后一条指令,而不是之后。哦,别忘了分配结果dfList &lt;- lapply(...)
  • 另外,dfList &lt;- c("df1", "df2", "df3", "df4") 也不起作用。你需要dfList &lt;- list(df1, df2, df3, df4)

标签: r


【解决方案1】:

您的列表不包含您的 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)

【讨论】:

  • 谢谢,但现在我的所有数据框都在一个列表中。如何将它们作为数据框放回去?
【解决方案2】:

由于您希望将所有数据框保留在全局环境中,因此我更喜欢使用for 循环。这允许您在全局环境中操作(lapply 要求您将某些内容返回到全局环境)。

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

【讨论】:

  • 谢谢!这正是我想要的。
【解决方案3】:

其他答案效果很好,但这是另一种选择。每当我想清理我的列名时,我总是求助于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

【讨论】:

    猜你喜欢
    • 2017-01-23
    • 1970-01-01
    • 2020-09-02
    • 2019-08-19
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多