我应该如何在R中解析这个字符串,使其看起来像下面这样?我尝试通过gsub()
正则表达式来实现,但是没有成功。
输入:
"dag{D<-{G}; A<-{D}; A<-{G}; A<-{Q}}"
输出:
"D<-G;A<-D;A<-G;A<-Q"
我尝试过:
gsub("dag{(.*)}","","dag{D<-{G}; A<-{D}; A<-{G}; A<-{Q}}")
我应该如何在R中解析这个字符串,使其看起来像下面这样?我尝试通过gsub()
正则表达式来实现,但是没有成功。
输入:
"dag{D<-{G}; A<-{D}; A<-{G}; A<-{Q}}"
输出:
"D<-G;A<-D;A<-G;A<-Q"
gsub("dag{(.*)}","","dag{D<-{G}; A<-{D}; A<-{G}; A<-{Q}}")
这对你来说好吗?
gsub(pattern = "dag|\\{|\\}|[[:space:]]", replacement = "", x = "dag{D<-{G}; A<-{D}; A<-{G}; A<-{Q}}")
library(ggdag)
library(dagitty)
# read dag format
dag <- dag("dag{D<-{G}; A<-{D}; A<-{G}; A<-{Q}}")
dag
# dag {
# A
# D
# G
# Q
# dag
# D -> A
# G -> A
# G -> D
# Q -> A
# }
# plot
ggdag(dag) + theme_dag()
> gsub("[(dag){} ]", "", "dag{D<-{G}; A<-{D}; A<-{G}; A<-{Q}}")
[1] "D<-G;A<-D;A<-G;A<-Q"
igraph
包中的以下代码。g <- graph_from_data_frame(
matrix(
unlist(
regmatches(x, gregexpr("\\w+", x))
)[-1],
ncol = 2, byrow = TRUE
)[, 2:1]
)
such that
> g
IGRAPH 9786b7a DN-- 4 4 --
+ attr: name (v/c)
+ edges from 9786b7a (vertex names):
[1] G->D D->A G->A Q->A
stringr
,您可以尝试:str <- "dag{D<-{G}; A<-{D}; A<-{G}; A<-{Q}}"
library(stringr)
str_remove_all(str, "(dag)|[ {}]")
#> [1] "D<-G;A<-D;A<-G;A<-Q"
本文于2021年8月31日由reprex包 (v2.0.0)创建
input <- "dag{D<-{G}; A<-{D}; A<-{G}; A<-{Q}}"
output <- regmatches(input, gregexpr("[A-Z]+<-\\{[A-Z]+\\}", input))[[1]]
output <- paste(gsub("[{}]", "", output), collapse=";")
output
[1] "D<-G;A<-D;A<-G;A<-Q"
这个答案非常健壮,因为它不假设任何关于图边界的文本。相反,它只匹配边缘,然后剥离花括号。
[A-Za-z]+
进行匹配。 - Tim Biegeleisendag
可能会变成一个真正的“狗”。 - Tim Biegeleisen
gsub("dag|[{} ]","","dag{D<-{G}; A<-{D}; A<-{G}; A<-{Q}}")
可能会用到方括号。 - zx8754