2016-07-11 7 views
-1
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에 쓰고 싶습니다. 어떻게해야합니까? 고맙습니다!정규식 추출 쉼표 사이의 정보

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

(감사 @alistaire하기). 'unique (scan (text = as.character (data $ x), sep = ",", what = ""))'와 같은 것이 아마도 그렇게 할 것입니다. 'strsplit()'이 또 다른 옵션입니다. –

+1

또는'strsplit'을 사용하십시오. 예를 들면 다음과 같습니다.'unlist (strsplit as.character (data $ x), ","))' – agstudy

+0

데이터가 단지 쉼표로 분리되어 있다면 실제로는 정규식이 필요 없습니다. 그렇지 않으면'y <- unique (unlist (str_extract_all (data $ x, "[^,] +"))) 또는 좀 더 구체적인 것으로 보일 수 있습니다. –

답변

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" 
1

tidyr 솔루션 : 골 y를이 같은 예상된다

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

또는 정규식 정말 여기에 필요하지 않습니다

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

해들리가 0.5.0에있는 해당 구조체의 래퍼를 작성했습니다. 'data %> % separate_rows (x) %> % unique()' – alistaire

+0

덕분에, 나는 흘러간 것을 보았지만 찾을 수 없다고 생각했습니다. –