以“ c(\“ a \”,\“ b \”)“格式获取数据

时间:2018-07-08 13:23:57

标签: r regex dplyr data-cleaning stringr

我有一个字符串"c(\"AV\", \"IM\")",我正在尝试将其转换为字符串"AV IM"

我的问题是我不能unlist()flatten(),因为它是一个字符,paste()stringr::str_c()都不起作用,因为从技术上讲它还是1个字符值。

有什么想法我该怎么做?

最好使用Tidyverse解决方案。

编辑:我知道这可以通过正则表达式解决,但是我觉得这比字符串正则表达式问题更能解决字符串级的“根本性”问题。

4 个答案:

答案 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",  "", .)