2010-12-17 10 views
6

To powinno być łatwe. Podobny przykład, który tu przeczytałem, był nieco bardziej skomplikowany, a techniki nie działają dla mnie.R strsplit problem (łatwa naprawa?)

Mam zmienną o nazwie id_string

> typeof(id_string) 
[1] "character" 

i

> id_string 
[1] "1,2,5,6,10" 

Co chcę zrobić, to podzielić się te wartości i przechowywać je w nowej zmiennej. Tak, że na przykład:

x[1] = 1 
x[4] = 6 
x[5] = 10 

Próbowałem zrobić

x <- strsplit(id_string,",") 

podzielić je przecinkiem, ale ja po prostu x = "1 2 5 6 10"

czytam przez this post tutaj który jest podobny i myślę, że coś w rodzaju

x <- read.csv(textConnection(id_string)) 

zadziała, ale na próżno.

Być może już ponad to myślę. Daj mi znać, jeśli masz jakieś pomysły. Dziękuję Ci.

Odpowiedz

7

Nie jesteś pewien, co robisz źle, ponieważ działa tak jak w reklamie.

> x <- unlist(strsplit("1,2,5,6,10", ",")) 
> x 
[1] "1" "2" "5" "6" "10" 
> x[1] 
[1] "1" 

Należy pamiętać, że strsplit zwraca list.

+0

Wow, tak, zapomniałem o tym, że lista jest pusta. Dziękuję za szybką odpowiedź! – user546497

+0

@user - możesz również owijać wszystko w 'as.numeric()' jeśli będziesz miał do czynienia z liczbami przez cały czas. Jeśli robisz to często, umieszczenie tego w niestandardowej funkcji zaoszczędzi ci trochę czasu i pisania. – Chase

+1

Metoda x <- read.csv (textConnection (id_string)) zakłada, że ​​masz nagłówek, ale zwróciłby ramkę danych z x <- read.table (textConnection (id_string), sep = ",") –

0

Klejenie za pomocą strsplit, jak opisano powyżej, jest prawdopodobnie najlepsze.

Myślę, że read.csv nie spełniało oczekiwań, ponieważ szukało nagłówka. Możesz spróbować:

s <- "1,2,5,6,10" 
read.csv(textConnection(s), header=FALSE) 

jednoznacznie nakazuje, aby nie szukać nagłówka. Nadal będziesz musiał wyciągnąć swoje liczby z wynikowego data.frame. Lepszym wyjściem może być skanowanie funkcji niższego poziomu, które daje wektor liczb bezpośrednio:

scan(textConnection(s), sep=",", quiet=TRUE) 
Powiązane problemy