R 从“获取数据”;c(\";a\";,\";b\";)";格式

R 从“获取数据”;c(\";a\";,\";b\";)";格式,r,regex,dplyr,data-cleaning,stringr,R,Regex,Dplyr,Data Cleaning,Stringr,我有一个字符串“c”(“AV\”,“IM\”),我正试图将其转换为字符串“AV IM” 我的问题是,我不能unlist()或flant()这个,因为它是一个字符,paste()或stringr::stru c()都不能工作,因为从技术上讲它仍然是一个字符值 你知道我该怎么做吗 如有可能,首选Tidyverse解决方案 编辑:我知道这可以通过正则表达式来解决,但我觉得这更像是一个需要在字符串级别解决的“基本”问题,而不是正则表达式问题,如果这有任何意义的话。不确定您是如何做到这一点的,但这将是一个

我有一个字符串
“c”(“AV\”,“IM\”)
,我正试图将其转换为字符串
“AV IM”

我的问题是,我不能
unlist()
flant()
这个,因为它是一个字符,
paste()
stringr::stru c()
都不能工作,因为从技术上讲它仍然是一个字符值

你知道我该怎么做吗

如有可能,首选Tidyverse解决方案


编辑:我知道这可以通过正则表达式来解决,但我觉得这更像是一个需要在字符串级别解决的“基本”问题,而不是正则表达式问题,如果这有任何意义的话。

不确定您是如何做到这一点的,但这将是一个评估/解析的情况。然而,正如在本网站的许多其他答案中所指出的,几乎总是有更好的方法来准备数据,这样你最终会以一种更友好的形式结束。首先,请参见

>a(b粘贴(b,collapse=”“)
[1] “AV IM”

< /代码> 您也可以考虑使用正则表达式替换所有符号和开始C./P>
s <- "c(\"AV\", \"IM\")"

s_vec <- strsplit(s, split = ",")[[1]]

gsub("[[:punct:]]|^c", "", s_vec)
# [1] "AV"  " IM"

s其他答案输出一个向量。我的理解是您需要一个以空格分隔的字符串列表

library(dplyr)

a <- "c(\"AV\", \"IM\")"

a %>%
  gsub("c(", "", ., fixed=TRUE) %>% 
  gsub("\"", "", ., fixed=TRUE) %>% 
  gsub(",",  "", ., fixed=TRUE) %>% 
  gsub(")",  "", ., fixed=TRUE)

编辑或简单(来自@www的答案):


好吧,你是怎么来到这里的并不容易。你可以使用eval parse,尽管它不是矢量化的。而且它速度很慢。因此你需要一个正则表达式:

 a <- "c(\"AV\", \"IM\")"
 stringr::str_extract_all(a,"\\w+(?!\\()")
[[1]]
[1] "AV" "IM"

a我认为在这里,
eval(parse)(text
是最干净的解决方案。不干净的是在将数据转换成这种形式之前对数据所做的操作。是的,这正是我的意思,感谢您的澄清,我将进行编辑。iI您是负责将数据转换成这种形式的人(可能使用
作为.character(替换(…)
?)您最好解决这个上游问题。我同意您的观点。我肯定想尽早解决这个问题。问题是我不确定如何解决。我认为这是字符串级别的问题(不是字符级别,正则表达式有意义)。输出这个字符串的指令是什么?
"AV IM"
a %>%
  gsub("[[:punct:]]|^c",  "", .)
 a <- "c(\"AV\", \"IM\")"
 stringr::str_extract_all(a,"\\w+(?!\\()")
[[1]]
[1] "AV" "IM"