0
データフレームx1の複数の列のNA値を、共通の異なる属性値「ID」に基づいてデータフレームx2とx3の値の平均で置き換えようとしています。私はthis postに、感謝を一度に1列にそれを行うための答えを見つけた複数の列のNAを他のデータフレームの平均値と置き換えます。
ID A B C .....
01 2 5 7 .....
02 NA NA NA .....
03 5 4 8 .....
:
すべてのデータフレームは、(各データフレームは、特定の年のためである)同じ列構造を有しています。
x1$A[is.na(x1$A)] <- (x2$A[match(x1$ID[is.na(x1$A)],x2$ID)] + x3$A[match(x1$ID[is.na(x1$A)],x3$ID)])/2
しかし、私はこれを適用するために約100カ月を持っているので、私はそれを行うよりスマートな方法を持っていると思っています。 私はthis postとhereからの提案を試しました。 私はこのコードを考え出しましたが、それを動作させることはできませんでした。
x1[6:105] = as.data.frame(lapply(x1[6:105], function(x) ifelse(is.na(x), (x2$x[match(x1$ID, x2$ID)]+x3$x[match(x1$ID, x3$ID)])/2, x1$x)))
は、次のエラーを得た:
Error in ifelse(is.na(x), (x2$x[match(x1$ID, x2$ID)] + x3$x[match(x1$ID, : replacement has length zero
私が最初の関数(x)はカラム全体に取り組んで、xは列名を表すが、私は、それは個々のセルの値を表して考え、それがあると思いましたなぜそれが働かないのか。
私はRの初心者です。論理を複数の列に適用する際に、どこが間違っているのかを教えてください。
これはおそらくエラーの原因ではありませんが、 'ifelse'の最後の引数は' x1 $ x'ではなくxでなければなりません。 – lmo