私はRでクロス集計を行い、平均を計算しようとしています。with()を使用してクロス集計を実行するときの警告?
まず私は、変数を選択して、新しいデータフレームを作成しました:
seed <- ruk_trial$Ruk_seed_input #integer
soilec <- ruk_trial$Ruk_soilEC #num
ruk_trial$code_smoo[ruk_trial$code_smoo == 0] <- 'US'
ruk_trial$code_smoo[ruk_trial$code_smoo == 1] <- 'LS'
ruk_trial$code_smoo[ruk_trial$code_smoo == 2] <- 'HS'
zones <- ruk_trial$code_smoo #chr
netincome <- ruk_trial$NetIncome #num
yield <- ruk_trial$Dry_yield #num
ruk_df <- as.data.frame(cbind(seed,soilec,zones,netincome,yield))
その後、私は()を使用します。
with(ruk_df, tapply(netincome, list(zones=zones, seed=seed), mean))
しかし、それは結局のところ:
seed
zones 105 120 75 90
HS NA NA NA NA
LS NA NA NA NA
US NA NA NA NA
There were 12 warnings (use warnings() to see them)
> warnings()
Warning messages:
1: In mean.default(X[[i]], ...) :
argument is not numeric or logical: returning NA
をした場合、私は元のデータセットを使用してください。
> cross.tab<- with(ruk_trial, tapply(netincome, list(zones=zones,seed=seed), mean))
誰でも警告の原因を教えていただけますか?
あなた 'cbind'が行列を返し、行列が唯一のデータモードを持つことができますcbind'文字 –
'にすべてを行っているので、あなたの数値データを文字に強制取得され、 as.data.frameはそれらの文字列をfactorに変換します。代わりに、 'as.data.frame(cbind(...)) 'の代わりに' as.data.frame(...) 'を実行してください。 – eipi10
また、カウント、手段、その他の統計をグループ別に計算するには、 'dplyr'や' data.table'パッケージが便利でしょう。たとえば、 'dplyr'では、グループ(ビルドイン' mtcars'データフレームを使用して)で要約すると、 'library(dplyr); mtcars%>%group_by(am、vs)%>%summarise_all(funs(n()、mean(。))) ' – eipi10