r - 反引号内的 \uxxxx 序列
问题描述
我知道,一般来说,\uxxxx
反引号内不支持序列。您是否有任何解决方法将它们(\uxxxx
序列)包含在列名中?
具体来说,想象一下计算身体质量指数并将单位添加到列名。
从...开始
dt<-data.frame(
`Weight [kg]` = runif(5,50,100),
`Height [m]` = runif(5,1.5,2),
check.names=F
)
和mutate
:
> dt2<-dt %>%
mutate(
`BMI [kg/m\u00b2]`= `Weight [kg]`/`Height [m]`^2
)
这会产生一个错误:Error: \uxxxx sequences not supported inside backticks (line 3)
。
我的解决方法是这样的:
> dt2<-dt %>%
mutate(
`BMI [kg/m2]`= `Weight [kg]`/`Height [m]`^2
) %>%
set_colnames(colnames(.) %>% str_replace('2\\]', '\u00b2\\]'))
> colnames(dt2)
[1] "Weight [kg]" "Height [m]" "BMI [kg/m²]"
它给了我我想要的东西,但不是很优雅。
令人惊讶的是,更清晰的方法失败了:
> dt2<-dt %>%
mutate(
`BMI [kg/m2]`= `Weight [kg]`/`Height [m]`^2
) %>%
rename_all(str_replace, '2\\]', '\u00b2\\]')
> colnames(dt2)
[1] "Weight [kg]" "Height [m]" "BMI [kg/m2]"
所以,我的问题是:它可以以不那么老套的方式完成吗?
和:
- 是的,我确定,我需要
\uxxx
列名; - 是的,我在图表上进一步使用它们;
- 不,我不想用
expression
's 替换它们。
解决方案
只使用单引号而不是反引号怎么样?
dt %>% mutate('BMI [kg/m\u00b2]' = `Weight [kg]`/`Height [m]`^2)
#> Weight [kg] Height [m] BMI [kg/m²]
#> 1 67.68154 1.757490 21.91211
#> 2 72.32362 1.817616 21.89151
#> 3 89.28197 1.854459 25.96146
#> 4 52.14819 1.709520 17.84395
#> 5 83.48281 1.969367 21.52502
还是双引号?
dt %>% mutate("BMI [kg/m\u00b2]" = `Weight [kg]`/`Height [m]`^2)
#> Weight [kg] Height [m] BMI [kg/m²]
#> 1 67.68154 1.757490 21.91211
#> 2 72.32362 1.817616 21.89151
#> 3 89.28197 1.854459 25.96146
#> 4 52.14819 1.709520 17.84395
#> 5 83.48281 1.969367 21.52502
您还可以使用它们来访问新数据框中的项目:
dt2$'BMI [kg/m\u00b2]'
#> [1] 21.91211 21.89151 25.96146 17.84395 21.52502
dt2$"BMI [kg/m\u00b2]"
#> [1] 21.91211 21.89151 25.96146 17.84395 21.52502
或者您是否出于某种原因特别需要使用反引号?
推荐阅读
- mongodb - 根据引用的objectid查找文档
- jenkins - 如何为 Jenkins 中的所有现有用户分配相同的角色?
- docker - 通过我的 ip:host 访问我的容器不再工作
- python - AWS Sagemaker 推理终端节点未使用所有 vCPU
- go - 为什么要为私有包使用 golang 存储库(例如 Artifactory),GONOSUMDB/GOPRIVATE 是否危险?
- node.js - Sequelize js 无法与 Have 和 Group by 一起按预期工作
- azure - Azure Maps 静态图像服务 API 问题,来自数据上传 API 的“无效格式”
- flutter - 尝试用 Flutter 实现类似 YouTube 的全屏视频处理
- java - 如何从视频路径创建视频缩略图?
- typescript - 使用通用值修改接口键