【问题标题】:Regex extract info between two comma [duplicate]两个逗号之间的正则表达式提取信息[重复]
【发布时间】:2016-07-11 20:45:07
【问题描述】:
data<-data.frame(x=c("a,b","c","a,b","d,e,f,g"))
        x
1     a,b
2       c
3     a,b
4 d,e,f,g

我想从 x 列中提取信息并将每个唯一信息写入 y 列,我应该怎么做?谢谢! Col y 预计如下:

  y
1 a
2 b
3 c
4 d
5 e
6 f
7 g

【问题讨论】:

  • 这里真的不需要正则表达式。像unique(scan(text=as.character(data$x), sep=",", what="")) 这样的东西可能会这样做。 strsplit() 是另一种选择。
  • 或使用strsplit。例如:unlist(strsplit(as.character(data$x),","))
  • 如果数据只是逗号分隔,则不需要正则表达式,真的。否则,它可能看起来像 y &lt;- unique(unlist(str_extract_all(data$x, "[^,]+"))) 或更具体的东西。

标签: regex r gsub


【解决方案1】:
d<-data.frame(x=c("a,b","c","a,b","d,e,f,g"))

> levels(d$x)
[1] "a,b"     "c"       "d,e,f,g"

> e <- as.character(levels(d$x))
> e
[1] "a,b"     "c"       "d,e,f,g"
> 

> f <- strsplit(e,",")
> f
[[1]]
[1] "a" "b"

[[2]]
[1] "c"

[[3]]
[1] "d" "e" "f" "g"

unlist(f)
[1] "a" "b" "c" "d" "e" "f" "g"

【讨论】:

    【解决方案2】:

    tidyr 解决方案:

    library(tidyr)
    data %>% unnest(x=strsplit(as.character(x),",")) %>% unique()
    

    或者(感谢@alistaire)

    data %>% separate_rows(x) %>% unique()
    

    【讨论】:

    • Hadley 在 0.5.0 中为该结构编写了一个包装器:data %&gt;% separate_rows(x) %&gt;% unique()
    • 谢谢,我以为我看到了路过的东西,但找不到
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 2016-08-29
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多