2013-12-22 24 views
5

Die folgenden Arbeiten wie erwartet:einen Vektor von String in einen Vektor von ganzzahligen

> as.integer(c("2","3")) 
[1] 2 3 

aber wenn ich versuche, (mit dem stringr Paket):

> str_split("55,66,77",",") 
[[1]] 
[1] "55" "66" "77" 
> as.integer(str_split("55,66,77",",")) 
Error: (list) object cannot be coerced to type 'integer' 

Gibt es eine andere Art und Weise zu eine Zeichenfolge der Form "55,66,77" in den Vektor mit diesen drei Zahlen konvertieren? Ich bin ein kompletter Neuling und jeder Hinweis auf Dokumentation darüber würde sehr geschätzt werden.

Antwort

11

str_split gibt eine Liste zurück. Sie müssen das Element richtige Liste zuzugreifen:

as.integer(str_split("55,66,77",",")[[1]]) ## note the [[1]] 
# [1] 55 66 77 

Oder Sie unlist verwenden könnte die vollständige Liste in einen Vektor zu drehen:

as.integer(unlist(strsplit("55,66,77",","))) 
# [1] 55 66 77 
+0

Vielen Dank, das war wirklich schnell. Ich dachte, dass Listen Vektoren waren. – rwst

+2

Listen sind (generische) Vektoren, sind aber keine Vektoren, die in Ganzzahl umgewandelt werden können. –

5

Wenn Sie einen Vektor von Strings und wollen die Werte für jede wird lapply durch die Liste durchlaufen:

v <- c("55,66,77", "1,2,3") 
lapply(str_split(v, ','), as.integer) 
## [[1]] 
## [1] 55 66 77 
## 
## [[2]] 
## [1] 1 2 3 
2

Warum nicht scan verwenden? Wenn alle Daten zu Beginn durch Komma getrennte Ganzzahlen sind, wäre das Ergebnis ein Vektor von ganzen Zahlen, was die Notwendigkeit eliminiert, später as.integer zu verwenden.

x <- "55,66,77" 
y <- scan(text = x, what = 0L, sep=",") 
# Read 3 items 
y 
# [1] 55 66 77 
str(y) 
# int [1:3] 55 66 77 

mit mehreren Werten, nehmen Sie Ihre Wahl, ob Sie einen einzelnen Vektor oder eine Liste von Vektoren wollen:

v <- c("55,66,77", "1,2,3") 
scan(text = v, what = 0L, sep=",") 
# Read 6 items 
# [1] 55 66 77 1 2 3 
lapply(seq_along(v), function(z) scan(text = v[z], what = 0L, sep = ",")) 
# Read 3 items 
# Read 3 items 
# [[1]] 
# [1] 55 66 77 
# 
# [[2]] 
# [1] 1 2 3 

hinzufügen quiet = TRUE zu scan, wenn Sie nicht tun will die Meldungen darüber wie viele Werte eingelesen wurden ....

Verwandte Themen