3

115 列、1000 行の大きな csv が与えられました。列にはさまざまなデータがあり、一部は文字ベースで、一部は整数などです。ただし、データにはさまざまなタイプ (NA、-999、NULL など) の多数の null 変数があります。

私がやりたいことは、列のデータの 30% 以上が何らかのタイプの NULL である列の LIST を生成するスクリプトを作成することです。

これを行うために、1 つの列の NULL パーセンテージ (小数点として) を提供するスクリプトを作成しました。このスクリプトは私にとってはうまくいきます。

length(which(indata$ObservationYear == "" | is.na(indata$ObservationYear) |
indata$ObservationYear == "NA" | indata$ObservationYear == "-999" |
indata$ObservationYear == "0"))/nrow(indata)

すべての列に対してこれを行うスクリプトを書きたいと思います。lapply 関数を使用する必要があると思います。

ここでこれを実行しようとしましたが、このスクリプトをまったく機能させることができないようです:

Null_Counter <- lapply(indata, 2, length(x),
                   length(which(indata == "" | is.na(indata) | indata == "NA" | indata == "-999" | indata == "0")))
                   names(indata(which(0.3>=Null_Counter / nrow(indata))))

次のエラーが表示されます。

Error in match.fun(FUN) : '2' is not a function, character or symbol

と:

Error: could not find function "indata"

理想的には、すべての null 変数 (NA、-999、0、NULL) のパーセンテージが 30% を超える、すべての列名のベクトル LIST を提供してもらいたいと考えています。

誰でも助けることができますか?

4

2 に答える 2

1

関数をリストに適用する lapply ではなく apply を使用したいと思います。これを試して:

Null_Counter <- apply(indata, 2, function(x) length(which(x == "" | is.na(x) | x == "NA" | x == "-999" | x == "0"))/length(x))
Null_Name <- colnames(indata)[Null_Counter >= 0.3]
于 2015-06-02T19:08:54.003 に答える