0

以下の形式に従って、約 200 のフィールドと 1000000 のレコードを含むデータセットがあります。

Acc Field1 Field2 Field3 .....    
101   23   34   78    
102   6    1.2  89    
.
.
.

コマンドを入力すると

apply(dat3[varlist[9]],2,is.numeric)

結果としてTRUEでフィールド名の確認を取得しますが、としてテストしようとするとis.numeric(dat3[varlist[9]])、結果としてFALSEを受け取ります。

ここで、dat3 は作業中のデータフレームで、varlist はコマンドを使用して作成されます。

varlist <- names(dat3) 

varlist には、データ フレーム内のすべての変数のリストが含まれます。

リアルタイムのスクリーンショットを添付します。

ここで何が間違っているのかわかりません。

誰からの助けも大歓迎です。

ここに画像の説明を入力

4

3 に答える 3

4

データ フレームで列ごとにテストを実行する標準的な方法は、 を使用することsapplyです。

sapply(mtcars, is.numeric)
sapply(CO2, is.numeric)

(交換もお試しくださいis.numericclass

于 2013-10-22T10:36:54.720 に答える
2

[この方法で data.frameを使用すると、別の (より小さいデータ フレーム) が返されます。[[を使用するか、または のマルチインデックス バージョンを[使用して、ドロップが適用されるようにする必要があります。例えば:

class(mtcars[3])
[1] "data.frame"
is.numeric(mtcars[3])
[1] FALSE
is.numeric(mtcars[[3]])
[1] TRUE
is.numeric(mtcars[,3])
[1] TRUE
于 2013-10-22T10:33:34.790 に答える
1

もしあなたがそうするなら

varlist <- names(iris)
iris[varlist[1]]

変数自体ではなく、選択した列で新しいデータフレームを定義しています。

行う

iris[,colnames(iris) %in% varlist[1]]
is.numeric( iris[,colnames(iris) %in% varlist[1]])
#[1] TRUE

そして、次回は再現可能な例を作ってみてください

于 2013-10-22T10:34:40.990 に答える