2017-07-07 7 views
0

Ich habe einen Vektor von Zeichenfolgen und ich möchte Informationen daraus extrahieren. Die Saiten sehen aus wie folgt vor:Auszug aus String getrennt durch Doppelpunkt und Semikolon in R

obs, product 
    1, apple:pink lady;grade 1 
    2, apple--pink lady 
    3, orange 

Ich mag diese Informationen und organisiert extrahieren wollte:

obs, product_1, product_2, product_3 
    1, apple, pink lady, grade 1 
    2, apple, pink lady, NA, 
    3, orange, NA, NA 

Ich bin neu in die Programmierung und haben versucht, Unter verwenden (‚;. * $‘,‘ ', Datasetname), der einen neuen Vektor zurückgibt, für obs 1, kann ich Produkt 1 erhalten & 2 combined Folglich muss ich eine andere Runde tun, um die neu gebildeten Zeichenketten zu trennen. Für obs 3 (ohne Sonderzeichen, Doppelpunkt oder Semikolon) gibt die Funktion das Ganze zurück. Außerdem muss ich einige Fälle berücksichtigen, in denen das Trennzeichen anders sein kann, wie "-" anstelle von Doppelpunkt und Semikolon.

Ich frage mich, wie kann ich bekommen, was ich mit sqldf oder anderen Paketen in R?

Antwort

2

Wir können base R verwenden, um dies zu tun

df2 <- cbind(df1[1], read.csv(text=gsub('[:;-]+', ',', df1$product), 
     header = FALSE, na.strings = "", col.names = paste0("product_", 1:3))) 

df2 
# obs product_1 product_2 product_3 
#1 1  apple pink lady grade 1 
#2 2  apple pink lady  <NA> 
#3 3 orange  <NA>  <NA> 
+1

Sie können die 'col.names' Argument dynamisch mit' col.names = paste0 ("product_" machen, 1: max (sapply (strsplit (df1 $ Produkt, "[:; -] +"), Länge))) ' – Benjamin

+0

Können Sie diese ein bisschen mehr erklären? Ich bin neu in diesem Bereich. Vielen Dank für Ihre Zeit. – Jin

+0

@Zuo Ich habe das ganze Trennzeichen auf ',' mit 'gsub' ersetzt und lese die' product' Spalte mit 'read.csv', um drei Spalten zu erstellen und dann' cbind' mit der ersten Spalte – akrun

Verwandte Themen