如何将字符元素的引号转换为反引号而不是 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
对象获得相同的输出?
非常感谢您的帮助。
此致,
法汉
您的字符串实际上没有引号,它们只是以这种方式出现在控制台上。当使用 $
.
子集时,您必须在带有空格的变量名周围设置反引号可能会让您感到困扰
在 R 中,syntactically valid object names 应仅由字母、数字、点和下划线组成,第一个字符不包含数字或点。您可以使用 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`"
你不能有一个包含反引号引用名称的向量。既然你说你正在使用 for 循环,你可以使用 as.name
:
转换每个名称以在 for 循环中包含反引号
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`
也许是这样的:
result <- gsub('^(.{0})(.*)$', '\1`\2`', cols)
paste(result, collapse = " ")
输出:
1] "`big creek` `gage creek` `garvey creek` `larches creek` `little usable`"
我将一些字符存储为 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
对象获得相同的输出?
非常感谢您的帮助。
此致, 法汉
您的字符串实际上没有引号,它们只是以这种方式出现在控制台上。当使用 $
.
在 R 中,syntactically valid object names 应仅由字母、数字、点和下划线组成,第一个字符不包含数字或点。您可以使用 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`"
你不能有一个包含反引号引用名称的向量。既然你说你正在使用 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`
也许是这样的:
result <- gsub('^(.{0})(.*)$', '\1`\2`', cols)
paste(result, collapse = " ")
输出:
1] "`big creek` `gage creek` `garvey creek` `larches creek` `little usable`"