14

R にNaNs を含む文字データ フレームがあります。a を含む行を削除しNaNてから、数値データ フレームに変換する必要があります。

データフレームで as.numeric を実行すると、次のようになります

Error: (list) object cannot be coerced to type 'double'
 1:
 0:
4

2 に答える 2

22

@thijs van den bergh が指摘しているように、

dat <- data.frame(x=c("NaN","2"),y=c("NaN","3"),stringsAsFactors=FALSE)

dat <- as.data.frame(sapply(dat, as.numeric)) #<- sapply is here

dat[complete.cases(dat), ]
#  x y
#2 2 3

これを行う1つの方法です。

data.frameエラーは、数値を作成しようとしたことに起因します。私が示すオプションは、sapply代わりに各列ベクトルを数値にすることです。

于 2013-02-05T21:34:51.500 に答える
9

またはではなくdata.frames、すべての列、すべての列、またはこれらまたは他のタイプの混合 (例: / )であることに注意してください。numericcharacterlistnumericcharacterDatelogical

dat <- data.frame(x=c("NaN","2"),y=c("NaN","3"),stringsAsFactors=FALSE)
is.list(dat)
# [1] TRUE

サンプル データには、文字列が 2 つだけあります。

> str(dat)
'data.frame':   2 obs. of  2 variables:
 $ x: chr  "NaN" "2"
 $ y: chr  "NaN" "3

...次のように数値列を追加できます。

> dat$num.example <- c(6.2,3.8)
> dat
    x   y num.example
1 NaN NaN         6.2
2   2   3         3.8
> str(dat)
'data.frame':   2 obs. of  3 variables:
 $ x          : chr  "NaN" "2"
 $ y          : chr  "NaN" "3"
 $ num.example: num  6.2 3.8

そのため、R を実行しようとすると、as.numeric複数の型が含まれている可能性があるこのリスト オブジェクトを変換する方法がわからなくなるため、R は混乱します。user1317221_Gの答えは?sapply関数を使用しており、オブジェクトの個々のアイテムに関数を適用するために使用できます。?lapply代わりに、非常によく似た関数を使用することもできます (関数の詳細については、*applyこちらを参照してください - R Grouping functions: sapply vs. lapply vs. apply. vs. tapply vs. by vs. aggregate )

つまり、この場合、の各列に、次のように関数data.frameを適用できます。as.numeric

data.frame(lapply(dat,as.numeric))

出力が ではなく であることを確認するために、lapply呼び出しは でラップされます。つまり、次を実行します。data.framedata.framelist

lapply(dat,as.numeric)

あなたに与える:

> lapply(dat,as.numeric)
$x
[1] NaN   2

$y
[1] NaN   3

$num.example
[1] 6.2 3.8

その間:

data.frame(lapply(dat,as.numeric))

あなたに与える:

>  data.frame(lapply(dat,as.numeric))
    x   y num.example
1 NaN NaN         6.2
2   2   3         3.8
于 2013-02-05T22:01:31.947 に答える