2016-07-28 2 views
1

dplyrsummarise関数を使用して非常にイライラの問題があります。dplyrはstr.default(obj、...)のエラーをdimsします[製品11]オブジェクトの長さと一致しません[3]

これは私のデータセットです。

> 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 ... 

私は今とても治療によって、いくつかの要約統計を計算したい:

私に与え
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)) 

> 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 

をこれまでのところは良いです。しかし、私はggplotを使用してこのデータを試してみて、グラフならば、私は次のエラーを取得する:

> 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 

データフレームのstrはこれを与える:

> 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] 

私はここで何が起こっているか理解していません!助けてもらえますか?

+0

@Sumedhがそれを行ってますが、それはまだ私を与えます同じエラー –

+4

'Total_emmissions'は正規のベクトルではありません。これは1列の行列です。 '[1:101、1]'構造体の2つの値に注意してください。 –

+0

@PierreLafortune私は '[1:101,1]'が何であるか疑問に思っていました。どのように起こった可能性がありますか? 'cum_ems_totals <- cum_ems %>%のGROUP_BY(チャンバ)%>% 集計(Total_emmissions =最後(cumulative_emissions))'ベクターへ –

答えて

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

は、あなたの治療は、4つのレベルを持っているという事実のために、エラーメッセージに関連することができませんでしたか? 「U」、「IU」、「AN」の3つのレベルがあり、割り当てられたレベルは1,2,3であり、余分なレベル「..」には番号が割り当てられていません。

1

私はこの同じ問題に遭遇した時と終了時mutate_ifを追加することによってそれを解決し、場合には役立ちます:

df2<- df%>% 
    group_by(group) %>% 
    mutate_each(funs(scale, mean)) %>% 
    mutate_if(is.matrix, as.vector) 
関連する問題