整数

2013-12-22 9 views
5

次の作品のベクトルに文字列のベクトルに変換整数

> 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' 

他の方法にはありますフォーム "55,66,77"の文字列を、これらの3つの数字を持つベクトルに変換しますか? 私は完全な初心者です、そして、これについてのドキュメントへのヒントは非常に高く評価されるでしょう。

答えて

11

str_splitリストを返します。あなたは正しいリストの要素にアクセスする必要があります。

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

それとも、ベクターに完全なリストをオンにするunlistを使用することができます。

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

多くのおかげで、それは本当に速かったです。私はリストがベクトルだと思った。 – rwst

+2

リストは(一般的な)ベクトルですが、整数に強制変換できるベクトルではありません。 –

5

あなたは文字列のベクトルを持っており、それぞれの値が必要な場合、lapplyは、リストを反復します:

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

scanを使用しないのはなぜ?すべてのデータがコンマで区切られた整数で始まる場合、結果は整数のベクトルになり、後でas.integerを使用する必要はありません。あなたがいない場合

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 

scanquiet = TRUEを追加:複数の値を持つ

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 

は、あなたが単一のベクター又はベクターのリストが必要かどうかについてのお好きなところをお選びくださいどのくらいの値が読み込まれたかに関するメッセージを欲しいです。