1

形式のテキストに"12,34,77"、引用符を含む文字列があります。

これらの各数値の値をリストに入れる必要があります。私は使っlapplyてみましたstrsplit

control2=lapply(strsplit(data$values,","),as.numeric)

しかし、私はエラーが発生します:

文字以外の引数

私は何を間違っていますか?

4

4 に答える 4

10

1) ストラップ

1a) スカラーstrapplygsubfn パッケージから使用するワンライナーを次に示します。

library(gsubfn)
x <- '"12,34,567"'

strapply(x, "\\d+", as.numeric, simplify = c)
## [1]  12  34 567

1b) ベクトル化 ベクトル化されたバージョンはさらに単純です。次のsimplify=cように削除するだけです。

v <- c('"1,2,3"', '"8,9"') # test data
strapply(v, "\\d+", as.numeric)`

2) gsub とスキャン

2a) スカラーgsubで、ここではandを使用した 1 線形scanです。

scan(text = gsub('"', '', x), what = 0, sep = ",")
## Read 3 items
## [1]  12  34 567

2b) ベクトル化 ベクトル化されたバージョンにはlapply、コンポーネントの -ingが含まれます。

lapply(v, function(x) scan(text = gsub('"', '', x), what = 0, sep = ","))

3) スプリット

3a)スカラーで、これがstrsplit解決策です。"と の両方で分割することに注意してください,

as.numeric(strsplit(x, '[",]')[[1]][-1])
## [1]  12  34 567

3b) ベクトル化された ベクトル化されたソリューションには、lapplyコンポーネントの -ing が含まれます。

lapply(v, function(x) as.numeric(strsplit(x, '[",]')[[1]][-1]))

3c) ベクトル化 - 単純化またはわずかに単純化:

lapply(strsplit(gsub('"', '', v), split = ","), as.numeric)
于 2012-07-13T16:47:43.380 に答える
4

あなたの問題は、ソースデータに起因する可能性があると思います。いずれにせよ、数字を扱いたい場合は、引用符を取り除く必要があります。私はお勧めしgsubます。

> x <- '"1,3,5"'
> x
[1] "\"1,3,5\""
> x <- gsub("\"", "", x)
> x
[1] "1,3,5"
> as.numeric(unlist(strsplit(x, ",")))
[1] 1 3 5
于 2012-07-13T15:59:00.353 に答える
2

すでに指摘したように、最初に引用符を正規表現する必要があります。

ライブラリ内のdestring関数はtaRifxそれを行い (数値以外の文字をすべて削除)、数値に強制します。

test <- '"12,34,77"'
library(taRifx)
lapply(strsplit(test,","),destring)
[[1]]
[1] 12 34 77
于 2012-07-13T16:27:30.113 に答える
2

これを試して:

x <-  "12,34,77"
sapply(strsplit(x, ",")[[1]], as.numeric, USE.NAMES=FALSE)
[1] 12 34 77

の結果はstrsplit()リストのリストであるため、最初の要素を抽出して に渡す必要がありますlapply()


ただし、文字列に埋め込まれた引用符が実際に含まれている場合は、最初に埋め込まれた引用符を削除する必要があります。これに使用できますgsub()

x <-  '"12,34,77"'
sapply(strsplit(gsub('"', '', x), ",")[[1]], as.numeric, USE.NAMES=FALSE)
[1] 12 34 77
于 2012-07-13T15:55:42.790 に答える