4

さまざまな種類の数値、論理、日付などの 498 個の変数を含むデータセットがあり、これを観測用の行と変数用の列を持つ R のデータ フレームとして持っています。これらの変数には、欠損値をその変数の平均値に置き換えたい特定のサブセットがあります。

平均代入のために、この非常に単純な関数をコーディングしました。

impute.mean <- function(x) replace(x, is.na(x), mean(x, na.rm = TRUE))

そして、dataset$variableA などの個々の変数に適用すると、これは美しく機能します。

dataset$variableA <- impute.mean(dataset$variableA)

そうすることで、 1 つの変数に必要なものが正確に得られますが、これを行う必要がある変数のかなり大きなサブセットがあるため、代入が必要な各変数を手動で処理することは望ましくありません。

私の最初の本能は、R の適用関数の 1 つを使用してこれを効率的に行うことでしたが、これを正確に行う方法を理解していないようです。

大まかな最初の試みは、標準の適用を使用することでした。

newdataset <- apply(dataset, 2, impute.mean)

数値ではない変数を含むすべての列に関数を適用しようとするため、これは明らかに少し粗雑ですが、多数の警告が生成される可能性があるとしても、妥当な出発点のように思えました。残念ながら、この方法は機能せず、すべての変数は同じままです。

また、lapply、mapply、ddply をいくつか試してみましたが、これまでのところ成功していません。

理想的には、次のようなことができるようになりたいです。

relevantVariables <- c("variableA1", "variableA2", ..., "variableA293")
newdataset <- magical.apply(dataset, relevantVariables, impute.mean)

このように機能する適用機能はありますか?

あるいは、これを行うための他の効率的な方法はありますか?

4

2 に答える 2

0

それはあなたを満足させますか?

for (j in 1:length(dataset[1,]))
    {

        if (is.numeric(dataset[,j]))
        {
            for(k in 1:length(dataset[,1]))
            {
                if(is.na(dataset[k,j]))
                {
                    dataset[k,j] <- mean(dataset[,j],na.rm=T)
                }
            }
        }
    }
于 2013-06-25T13:10:33.147 に答える