提问人:Farhan 提问时间:2/27/2022 最后编辑:Farhan 更新时间:2/27/2022 访问量:520
如何在 R 中将字符元素的引号转换为用反引号而不是引号括起来
How to convert quotes of character elements to be surrounded by backticks instead of quotes in R
问:
我有一些字符存储为 cols。结果输出如下:
cols = c("big creek", "gage creek", "garvey creek", "larches creek", "little usable")
cols
[1] "big creek" "gage creek" "garvey creek" "larches creek" "little usable"
但是,我希望将引号替换为反引号,并且生成的输出应如下所示:
[1] `big creek` `gage creek` `garvey creek` `larches creek` `little usable`
有没有办法在 R 中为对象获得相同的输出?cols
您的帮助将不胜感激。
问候 法尔汉
答:
0赞
jay.sf
2/27/2022
#1
您的字符串实际上没有引号,它们只是在控制台上以这种方式显示。当使用 .$
在 R 中,语法上有效的对象名称应仅由字母、数字、点和下划线组成,第一个字符不应包含数字或点。您可以使用 轻松解决此问题。make.names
例:
df <- data.frame(`big creek`=1:3, `gage creek`=4:6, `garvey creek`=7:9, check.names=F)
df
# big creek gage creek garvey creek
# 1 1 4 7
# 2 2 5 8
# 3 3 6 9
names(df)
# [1] "big creek" "gage creek" "garvey creek" ## invalid names
df$`big creek` ## rather annoying backticks needed
# [1] 1 2 3
cols1 <- names(df) ## vector of column names
cols1
# [1] "big creek" "gage creek" "garvey creek"
make.names(cols1) ## `make.names` fixes names
# [1] "big.creek" "gage.creek" "garvey.creek"
names(df) <- make.names(cols1)
names(df)
# [1] "big.creek" "gage.creek" "garvey.creek" ## valid names
## actually you don't need to cache in a vector and just may do
names(df) <- make.names(names(df))
从那时起,使用有效的名称进行编码并单独标记您的数据,例如:
barplot(colSums(df), names.arg=c("big creek", "gage creek", "garvey creek"))
也就是说,如果您仍然想让字符串被反引号包围,则可以使用 .sprintf
sprintf('`%s`', cols)
# [1] "`big creek`" "`gage creek`" "`garvey creek`" "`larches creek`" "`little usable`"
评论
0赞
Farhan
2/27/2022
感谢您的快速回复。我实际上正在使用 for 循环功能在 ggplot2 包中绘制图形,以在网格中打印多个图形。对于引号或字符性质的 y 参数是不可接受的。当我用 bacticks 替换“”时,代码运行良好。但是对于循环,我想要 y 参数,因为这里 cols[i] 应该打印而不是“big creek”。aes(x = datetime, y = "big creek")
y = cols[i]
big creek
0赞
jay.sf
2/27/2022
@Farhan 如图所示,用于修复无效的列名。区分对象在 R 中的命名方式,以及某些内容在输出(如绘图)上的显示方式。make.names
0赞
Farhan
2/27/2022
我尝试用于 cols 对象。然后我在 aes() 函数中使用 cols[1] 作为 y 参数,但它导致了错误: 错误:提供给连续刻度的离散值make.names
0赞
jay.sf
2/27/2022
@Farhan 也许我不清楚,请看我更新的答案。
0赞
Farhan
2/27/2022
感谢您的详细回答。它在 plot 函数中工作,但不作为 in 函数的 y 参数的答案。我正在尝试将 y 参数作为 cols[1] 来打印“大希腊语”的情节,但我不想实际为每个站点手动输入名称。我可以在 for 循环中使用 cols[i] 来自动使用这些列名,但是当我使用 cols[1] 作为 y 参数的答案时,问题就在那里,它打印带有引号的“大希腊语”,而不是反引号(不带引号)。aes()
ggplot()
2赞
Onyambu
2/27/2022
#2
不能有包含反引号名称的向量。既然你说你正在使用 for 循环,你可以转换每个名称以包含 for 循环中的反引号:as.name
as.name(cols[1])
`big creek`
lapply(cols, as.name)
[[1]]
`big creek`
[[2]]
`gage creek`
[[3]]
`garvey creek`
[[4]]
`larches creek`
[[5]]
`little usable`
评论
0赞
Farhan
2/27/2022
谢谢。这就是我正在寻找的获取输出的内容,但将其用于 ggplot 美学中的论证,它将 cols[1] 视为符号而不是数据列。但是,粘贴 as.names(cols[1]) 的输出确实可以打印图表。我已经修改了每个站点的参数并设置了过滤器,它在循环功能中运行良好。感谢大家的宝贵意见。y
data
0赞
TarJae
2/27/2022
#3
也许是这样的:
result <- gsub('^(.{0})(.*)$', '\\1`\\2`', cols)
paste(result, collapse = " ")
输出:
1] "`big creek` `gage creek` `garvey creek` `larches creek` `little usable`"
评论