我有一个字符串"c(\"AV\", \"IM\")"
,我正在尝试将其转换为字符串"AV IM"
。
我的问题是我不能unlist()
或flatten()
,因为它是一个字符,paste()
和stringr::str_c()
都不起作用,因为从技术上讲它还是1个字符值。
有什么想法我该怎么做?
最好使用Tidyverse解决方案。
编辑:我知道这可以通过正则表达式解决,但是我觉得这比字符串正则表达式问题更能解决字符串级的“根本性”问题。
答案 0 :(得分:4)
不确定您如何到达这里,但是如前所述,这将是一次评估/分析。但是,正如本网站上许多其他答案所指出的那样,几乎总是存在更好的数据准备方式,因此您最终会以一种更加R友好的形式结束工作。对于初学者,请参见What specifically are the dangers of eval(parse(...))?。
> a <- "c(\"AV\", \"IM\")"
> (b <- eval(parse(text=a)))
[1] "AV" "IM"
> paste(b, collapse=" ")
[1] "AV IM"
答案 1 :(得分:1)
您还可以考虑使用正则表达式替换所有符号和开头的c。
s <- "c(\"AV\", \"IM\")"
s_vec <- strsplit(s, split = ",")[[1]]
gsub("[[:punct:]]|^c", "", s_vec)
# [1] "AV" " IM"
答案 2 :(得分:1)
嗯,你怎么来这里并不容易。您可以使用eval-parse,尽管它不是矢量化的。而且它很慢。因此,您需要一个正则表达式:
a <- "c(\"AV\", \"IM\")"
stringr::str_extract_all(a,"\\w+(?!\\()")
[[1]]
[1] "AV" "IM"
答案 3 :(得分:0)
其他答案输出向量。我的理解是,您需要用空格分隔的字符串列表。
library(dplyr)
a <- "c(\"AV\", \"IM\")"
a %>%
gsub("c(", "", ., fixed=TRUE) %>%
gsub("\"", "", ., fixed=TRUE) %>%
gsub(",", "", ., fixed=TRUE) %>%
gsub(")", "", ., fixed=TRUE)
输出
"AV IM"
编辑或简单地(根据@www的答案):
a %>%
gsub("[[:punct:]]|^c", "", .)