2016-08-15 2 views
0

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?

+2

Ihre 'cbind' –

+1

' 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

+1

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

Antwort

1

Try this:

ruk_df <- data.frame(seed,soilec,zones,netincome,yield, stringsAsFactors=FALSE) 
+0

Danke! Es klappt. Ich habe gerade festgestellt, dass 'as.data.frame' verwendet wird, um einen Datenrahmen einfach falsch zu machen. Und 'cbind' hatte alle Variablen in Faktoren umgewandelt. @renato vitolo –

+0

Die Umwandlung von 'cbind' in' character' und dann von 'as.data.frame' in' factor' wurde von Richard und eipi10 erklärt. –

Verwandte Themen