2017-06-22 6 views
0

列全体の平均値を中心に値を中心にしようとしています。私は大(大)データフレーム全体でこれを行う必要があるので、最初にcolMeansを試しました。このことから異なる関数を使用したときに同じ計算に異なる回答が得られる理由はわからない

colMeans(data, na.rm = TRUE)

、私は、データセットの最初の列のための5.567のような答えを得ます。しかし、私はこれを再度チェックしたかったのです。平均関数 mean(data$first_column, na.rm = TRUE)を使うと、代わりに8.466が得られます。私がExcelシートで平均を計算すると、6.5の周りに何かがあります。

生成されたデータセットでこの問題を再現することができなかったので、ここでは link to a GoogleDoc with the first two columns of my data setです。

最後の目標は、データセットのほぼすべての列の平均値を中心にして、lapply()でこれを行うと仮定しました。しかし、私がそれをする前に、なぜ私が非常に多くの異なる平均値を得ているのか理解したい。私はそれがNAsか何かと関係していると仮定しますが、私はそれをかなり把握していません。

ご協力いただきありがとうございます。

+0

エラーを再現することができません。私はcsvとしてGoogleドキュメントをダウンロードし、colmeansと平均を使用して6.502439を得ました。 –

+0

データフレームに 'complete.cases()'を使って、すべてのNAsが削除されるようにしてください。 'data < - data [complete.cases(data)、]' – sweetmusicality

+0

私は@IanWesleyに同意します。問題は再現性がありません。 6.502439は 'Irritability'の平均値です –

答えて

0

多くの試した後、ここに私のコードがあります。私はまだオフになっている平均値を取得していますが、colMeans()mean()はどちらも同じ答えを出していますので、関数ではなく変数NAと何か関係があると思います。私はまだそれを検討していますが、平均値の代わりに他の値を中心にして、NAsを平均値に置き換える方法を考え出しました。 This post helped me figure it out, specifically @Itsa's code

###center values first

center_asd_prep <- autgi %>% select(ID, Irritability, Other_Variables)

as.numeric(center_asd_prep$srs_tot_raw) -> center_asd_prep$srs_tot_raw

center_asd_mean <- center_asd_prep %>% select(-ID, -Group.y) #remove categorical info

#replacing NA with mean while centering other values around the mean center_asd_mean[] <- lapply(center_asd_mean, function(x) ifelse(is.na(x), mean(x, na.rm = TRUE), x))

#adding ID info back center_asd <- data.frame(center_asd_mean, ID = center_asd_prep$ID, Group = center_asd_prep$Group.y) center_asd

私はこのような高い平均値を得ている理由を理解したらこの記事を更新しますが、NAsの数が多い14の観測結果があります。これはN = 218 。仮に、誰かが私と同じ問題に遭遇した場合、このコードはうまくいくはずです。

関連する問題