2016-07-11 3 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, что мне делать? Спасибо! Col у, как ожидается, как:Regex extract info между двумя запятыми

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

Regex не очень нужны. Что-то вроде '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 (данные $ 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

A tidyr решение:

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

или (благодаря @alistaire)

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

Хэдли написал обертку для этой структуры в 0.5.0: 'data%>% separate_rows (x)%>% unique()' – alistaire

+0

спасибо, я думал, что видел что-то такое, но не смог найти –

Смежные вопросы