2016-07-11 26 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 

Ich möchte Informationen aus Spalte x extrahieren und jede eindeutige Info in Spalte y schreiben, was soll ich tun? Vielen Dank! Col y wird erwartet, wie:Regex-Extrakt Info zwischen zwei Komma

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

Regex ist hier nicht wirklich benötigt. Etwas wie 'unique (scan (text = as.character (data $ x), sep =", ", what =" ")) würde es wahrscheinlich tun. 'strsplit()' wäre eine andere Option. –

+1

Oder mit 'strsplit'. Zum Beispiel: 'unlist (strsplit (as.character (data $ x),", "))' – agstudy

+0

Wenn die Daten nur durch Kommata getrennt sind, braucht man wirklich keine Regex. Sonst könnte es aussehen wie 'y <- unique (unlist (str_extract_all (data $ x, "[^,] +"))) oder etwas Spezifischeres. –

Antwort

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 Lösung:

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

oder (dank @alistaire)

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

Hadley hat einen Wrapper für diese Struktur in 0.5.0 geschrieben: 'data%>% separate_rows (x)%>% unique()' – alistaire

+0

danke, ich dachte, ich hätte etwas gesehen, das vorbeigeht, aber nicht finden konnte –