R にNaN
s を含む文字データ フレームがあります。a を含む行を削除しNaN
てから、数値データ フレームに変換する必要があります。
データフレームで as.numeric を実行すると、次のようになります
Error: (list) object cannot be coerced to type 'double'
1:
0:
@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
代わりに各列ベクトルを数値にすることです。
またはではなくdata.frames
、すべての列、すべての列、またはこれらまたは他のタイプの混合 (例: / )であることに注意してください。numeric
character
list
numeric
character
Date
logical
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.frame
data.frame
list
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