2016-07-28 18 views
1

Ich habe ein sehr frustrierendes Problem mit dplyrgroup_by und summarise Funktionen.dplyr fazit Fehler in str.default (obj, ...) Dims [Produkt 11] stimmen nicht mit der Länge von Objekt [3]

Das ist mein Daten-Set:

> cum_ems_totals 
Source: local data frame [12 x 4] 

    Chamber Total_emmissions Treatment Block 
    <fctr>   <dbl> <fctr> <fctr> 
1  1  5769.0507   U  1 
2  3  7790.1426  IU  1 
3  4  5166.8992  AN  1 
4  5  7625.7319  AN  2 
5  6  1964.0970  IU  2 
6  7  5052.1268   U  2 
7  9  4207.5324  IU  3 
8  10   470.7014  AN  3 
9  12  5675.9171   U  3 
10  14  5666.1678   U  4 
11  15  2134.5002  AN  4 
12  16  4093.4687  IU  4 

> str(cum_ems_totals) 
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 12 obs. of 4 variables: 
$ Chamber   : Factor w/ 13 levels "1","3","4","5",..: 1 2 3 4 5 6 7 8 9 11 ... 
$ Total_emmissions: num [1:101, 1] 5769 7790 5167 7626 1964 ... 
$ Treatment  : Factor w/ 4 levels "U","IU","AN",..: 1 2 3 3 2 1 2 3 1 1 ... 
$ Block   : Factor w/ 5 levels "1","2","3","13",..: 1 1 1 2 2 2 3 3 3 5 ... 

Ich möchte nun einige Zusammenfassung der Statistiken von Behandlung berechnen, so:

cum_ems_summary <- cum_ems_totals %>% filter(Chamber != "10") %>% 
    group_by(Treatment) %>% 
    summarise(n = n(), Mean = mean(Total_emmissions, na.rm = TRUE), 
         SD = sd(Total_emmissions, na.rm = TRUE), SEM = SD/sqrt(n)) 

Was gibt mir:

> cum_ems_summary 
Source: local data frame [3 x 5] 

    Treatment  n  Mean  SD  SEM 
    <fctr> <int> <dbl>  <dbl>  <dbl> 
1   U  4 5540.816 329.0763 164.5381 
2  IU  4 4513.810 2415.6355 1207.8178 
3  AN  3 4975.710 2750.6038 1588.0618 

So weit so gut . Allerdings, wenn ich versuche und grafische Darstellung dieser Daten mit ggplot bekomme ich folgende Fehlermeldung:

> ggplot(cum_ems_summary, aes(x = Treatment, y = Mean, fill = Treatment)) + geom_bar(stat = "identity") 
Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, : 
    arguments imply differing number of rows: 3, 11 

Die str des Datenrahmen ergibt dies:

> str(cum_ems_summary) 
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 3 obs. of 5 variables: 
$ Treatment: Factor w/ 4 levels "U","IU","AN",..: 1 2 3 
$ n  : int 4 4 3 
$ Mean  : 
Error in str.default(obj, ...) : 
    dims [product 11] do not match the length of object [3] 

Ich verstehe nicht, was hier los ist! Kann mir jemand helfen?

+0

@Sumedh das getan, aber es gibt nach wie vor mir der gleiche Fehler –

+4

'Total_emmissions' ist kein regulärer Vektor. Es ist eine Ein-Spalten-Matrix. Beachten Sie die zwei Werte in der Struktur '[1: 101, 1]' 'Erzwingen Sie es zu einem Vektor. –

+0

@PierreLafortune Ich fragte mich, worum es bei der "[1: 101,1]" ging. Irgendwelche Ideen wie das passiert ist? 'cum_ems_totals <- cum_ems %>% group_by (Chamber)%>% summieren (Total_emissions = last (kumulative_emissions))' –

Antwort

3
#Reproduce error 
str(cum_ems_summary) 
# Error in str.default(obj, ...) : 
# dims [product 11] do not match the length of object [3] 

#Fix 
cum_ems_totals$Total_emmissions <- c(cum_ems_totals$Total_emmissions) 


#Try again 
cum_ems_summary <- cum_ems_totals %>% filter(Chamber != "10") %>% 
    group_by(Treatment) %>% 
    summarise(n = n(), Mean = mean(Total_emmissions, na.rm = TRUE), 
      SD = sd(Total_emmissions, na.rm = TRUE), SEM = SD/sqrt(n)) 

ggplot(cum_ems_summary, aes(x = Treatment, y = Mean, fill = Treatment)) + geom_bar(stat = "identity") 

enter image description here

-1

könnte die Fehlermeldung nicht damit zusammenhängen, dass Ihre Behandlung 4 Stufen hat? Wenn es 3 Stufen haben soll, sind "U", "IU", "AN" und zugewiesene Stufen 1, 2, 3 und der zusätzlichen Ebene ".." ist keine Nummer zugewiesen.

1

Ich lief in das gleiche Problem und löste es durch eine mutate_if am Ende hinzufügen, falls es hilft:

df2<- df%>% 
    group_by(group) %>% 
    mutate_each(funs(scale, mean)) %>% 
    mutate_if(is.matrix, as.vector)