2017-12-14 5 views
0

Ich habe einen Datensatz alsSplit Zahlen- und Zeichen durch mehrere Trennzeichen und dann Matrix machen

1  Saturday,SatAug 13, 2016-5:30 PM 
2     54.362·Robert Madley 
3   Sunday,SunAug 14, 2016-1:30 PM 
4  11.355 sold out·Andre Marriner 

folgen und was ich tun möchte, ist zu trennen Datenmenge durch „“ oder ‚·‘ und es dann als Matrix machen oder Datenrahmen. Im Falle von Zeile4, 11.355 und "ausverkauft" muss auch geteilt werden. So letzte Dataset

date  date1  time   a  f    s 
Saturday SatAug 13 2016-5:30 PM 54.362 Robert Madley 
Sunday  SunAug 14 2016-1:30 PM 11.355 Andre Marriner sold out 
+5

[Wie ein großes R reproduzierbare Exempel statuieren?] (Http://stackoverflow.com/questions/5963269) – Sotos

+3

Ist eine Zeile der Ausgabe immer zwei Zeilen der Eingabedaten? – A5C1D2H2I1M1N2O1R2T1

+0

Scheint so, als ob (i) die erste Zeile durch "", "" getrennt ist und (ii) die zweite Zeile durch "" · "getrennt ist. Dann (iii) wird die Spalte "a" in numerische und nicht-numerische Teile aufgeteilt. – Heikki

Antwort

0

Unter der Annahme einer Beobachtung immer aus zwei Datenreihen in den Rohdaten zusammengesetzt ist, sein sollte, hier eine Lösung mit dplyr + tidyr:

library(dplyr) 
library(tidyr) 

df %>% 
    mutate(ID = c(0, rep(1:(n()-1)%/%2))) %>% 
    group_by(ID) %>% 
    mutate(ID2 = paste0('V', row_number())) %>% 
    spread(ID2, V2) %>% 
    separate(V1, c("date", "date1", "time"), sep = ",\\s?") %>% 
    extract(V2, c("a", "s", "f"), regex = "^(\\d+\\.\\d+\\b)(\\b.+)?·(.+)", convert = TRUE) 

Ergebnis:

# A tibble: 2 x 7 
# Groups: ID [2] 
    ID  date  date1   time  a   s    f 
* <dbl> <chr>  <chr>  <chr> <dbl>  <chr>   <chr> 
1  0 Saturday SatAug 13 2016-5:30 PM 54.362  <NA> Robert Madley 
2  1 Sunday SunAug 14 2016-1:30 PM 11.355 sold out Andre Marriner 

Daten:

df = read.table(text = "1|Saturday,SatAug 13, 2016-5:30 PM 
2|54.362·Robert Madley 
3|Sunday,SunAug 14, 2016-1:30 PM 
4|11.355 sold out·Andre Marriner", sep = "|", row.names = 1, 
       stringsAsFactors = FALSE) 
+0

Vielen Dank. Es klappt. Ich werde "muate" -Funktion üben. – wan

+0

@wan Froh, dass es funktioniert. Wenn Sie denken, dass dies Ihre Frage beantwortet, vergessen Sie nicht, sie zu akzeptieren, indem Sie auf das graue Häkchen unter der Schaltfläche "Downvote" klicken. :) – useR

Verwandte Themen