在环境中,我试图将每个数据框中的列名大小写从大写改为小写。我使用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))
})
我做错了什么?
答案 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