拯救你那些列名里有特殊字符的数据
2022-06-26 本文已影响0人
小洁忘了怎么分身
问题
列名里有特殊字符时,运行tidyverse的代码就会失败,举个栗子:
编个有特殊字符的数据
test = iris
colnames(test)[1] = "ca di"
library(ggplot2)
ggplot(test)+
geom_boxplot(aes(Species,
ca di))
## Error: <text>:3:22: unexpected symbol
## 2: geom_boxplot(aes(Species,
## 3: ca di
## ^
搜索
去搜索解决办法,找到了两个链接: https://community.rstudio.com/t/how-to-deal-with-spaces-in-column-names/15818
https://community.rstudio.com/t/unexpected-symbol-for-plotting-ggplot/90667就是把列名前后加上反引号就可以了。这个操作以前也有过,用$写列名时,有特殊字符就会自动加上反引号,如下:
test$`ca di`
## [1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1
## [19] 5.7 5.1 5.4 5.1 4.6 5.1 4.8 5.0 5.0 5.2 5.2 4.7 4.8 5.4 5.2 5.5 4.9 5.0
## [37] 5.5 4.9 4.4 5.1 5.0 4.5 4.4 5.0 5.1 4.8 5.1 4.6 5.3 5.0 7.0 6.4 6.9 5.5
## [55] 6.5 5.7 6.3 4.9 6.6 5.2 5.0 5.9 6.0 6.1 5.6 6.7 5.6 5.8 6.2 5.6 5.9 6.1
## [73] 6.3 6.1 6.4 6.6 6.8 6.7 6.0 5.7 5.5 5.5 5.8 6.0 5.4 6.0 6.7 6.3 5.6 5.5
## [91] 5.5 6.1 5.8 5.0 5.6 5.7 5.7 6.2 5.1 5.7 6.3 5.8 7.1 6.3 6.5 7.6 4.9 7.3
## [109] 6.7 7.2 6.5 6.4 6.8 5.7 5.8 6.4 6.5 7.7 7.7 6.0 6.9 5.6 7.7 6.3 6.7 7.2
## [127] 6.2 6.1 6.4 7.2 7.4 7.9 6.4 6.3 6.1 7.7 6.3 6.4 6.0 6.9 6.7 6.9 5.8 6.8
## [145] 6.7 6.7 6.3 6.5 6.2 5.9
解决
ggplot(test)+
geom_boxplot(aes(Species,
`ca di`))
ok 啦。
拓展
如果是循环作图,用同样的代码换数据画多张图,可以用for循环或者lapply。
用lapply举个栗子
aes_string 替代aes
a = lapply(1:4, function(i){
ggplot(test)+
geom_boxplot(aes_string("Species",
paste0("`",colnames(test)[i],"`"),
fill = "Species"))+
theme_bw()
})
library(patchwork)
wrap_plots(a)+plot_layout(guides = "collect")
eval+parse 解析字符串
b = lapply(1:4, function(i){
ggplot(test)+
geom_boxplot(aes(Species,
eval(parse(text = paste0("`",colnames(test)[i],"`"))),
fill = Species))+
ylab(colnames(test)[i])+
theme_bw()
})
wrap_plots(b)+plot_layout(guides = "collect")