Ich versuche eine Kreuztabelle in R durchzuführen und die Mittel zu berechnen.Warnungen bei Kreuztabellen mit()?
Zum einen habe ich mit Variablen und erstellt einen neuen Datenrahmen:
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))
Dann benutze ich mit():
with(ruk_df, tapply(netincome, list(zones=zones, seed=seed), mean))
Aber es stellt sich heraus:
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
Wenn ich Verwenden Sie den ursprünglichen Datensatz, es funktioniert:
> cross.tab<- with(ruk_trial, tapply(netincome, list(zones=zones,seed=seed), mean))
Kann mir jemand sagen, was die Warnungen verursacht?
Ihre 'cbind' –
' alles in ein Zeichen macht cbind' eine Matrix zurückgibt und eine Matrix kann nur einen Datenmodus haben, so dass Ihre numerische Daten zum Charakter dazu gezwungen zu werden, und dann konvertiert as.data.frame diese Zeichenspalten in factor. Verwenden Sie stattdessen 'as.data.frame (...)' anstelle von 'as.data.frame (cbind (...))'. – eipi10
Auch für die Berechnung von Zählern, Mitteln und anderen Statistiken nach Gruppe können Sie die Pakete 'dplyr' oder' data.table' bequemer finden. Zum Beispiel, in 'dplyr', um nach Gruppe zusammenzufassen (unter Verwendung des eingebauten Datenrahmens mtcars):' library (dplyr); mtcars%>% group_by (am, vs)%>% summarise_all (Spaß (n(), mean (.))) '. – eipi10