2017-12-13 10 views
2

は、どのように私は、標準偏差とのプロットを行うことができます

df<- structure(list(data1 = c(20171205L, 20171205L, 20171205L, 20171205L, 
20171205L, 20171205L, 20171205L, 20171205L, 20171205L, 20171205L, 
20171205L, 20171205L, 20171205L, 20171205L, 20171205L, 20171205L, 
20171205L, 20171205L, 20171205L, 20171205L), data2 = c(0.00546273, 
0.00552377, 0.00549325, 0.00550851, 0.00556954, 0.00560006, 0.00555428, 
0.00560006, 0.0055848, 0.00561532, 0.00555428, 0.0055848, 0.00552377, 
0.00549325, 0.00550851, 0.00556954, 0.00560006, 0.00555428, 0.00560006, 
0.0055848), data3 = c(0.00546273, 0.00552377, 0.00549325, 0.00550851, 
0.00556954, 0.00560006, 0.00555428, 0.00560006, 0.0055848, 0.00561532, 
0.00555428, 0.0055848, 0.00552377, 0.00549325, 0.00550851, 0.00556954, 
0.00560006, 0.00555428, 0.00560006, 0.0055848), mydf = structure(1:20, .Label = c("B02", 
"B03", "B04", "B05", "B06", "C02", "C03", "C04", "C05", "C06", 
"D02", "D03", "D04", "D05", "D06", "E02", "E03", "E04", "E05", 
"E06"), class = "factor")), .Names = c("data1", "data2", "data3", 
"mydf"), class = "data.frame", row.names = c(NA, -20L)) 

の下に、私は特定の行ここ の平均値と標準偏差を取得しようとしていますように私のデータは、私が何をされて見えます

# here is to get the mean 

    library(dplyr) 
    df2 <- df %>% 
     group_by(Group = case_when(
     grepl("02$|03$", mydf)  ~ 1L, 
     grepl("04$|05$|06$", mydf) ~ 2L, 
     TRUE      ~ NA_integer_ 
    )) %>% 
     summarise_at(vars(-mydf), funs(mean(.))) 

# here is to get the standard deviation 
df3 <- df %>% 
    group_by(Group = case_when(
    grepl("02$|03$", mydf)  ~ 1L, 
    grepl("04$|05$|06$", mydf) ~ 2L, 
    TRUE      ~ NA_integer_ 
)) %>% 
    summarise_at(vars(-mydf), funs(sd(.))) 

次に、平均とそれらのsdを入れたいと思いますが、これら2つのdfを一緒にマージしてプロットする方法がわかりません

最初の列はx軸です(この場合1と2)

データは、(例えば)のプロットは、このようになりますので:

1でdata1ため、それはdata1ため2で0のSDと20171205

になり、それは20171205なりdata2のための1で0

のSDと、それは4.573063e-05のSDと0.005556190

になります2オン

data2のために、それはなど、4.529097e-05のSDと0.005553013になります

答えて

1

おそらくかなり広いよりも、長い形式でデータ操作を行うためにきれいになります:

dff <- df %>% 
    # define Group based on mydf, then remove mydf 
    mutate(Group = case_when(grepl("02$|03$", mydf) ~ 1L, 
          grepl("04$|05$|06$", mydf) ~ 2L, 
          TRUE ~ NA_integer_)) %>% 
    select(-mydf) %>% 

    # convert to long format using gather from tidyr package 
    tidyr::gather(data, value, -Group) %>% 

    # calculate mean & sd within the same summarise() call 
    group_by(Group, data) %>% 
    summarise(data.mean = mean(value), 
      data.sd = sd(value)) 

> dff 
# A tibble: 6 x 4 
# Groups: Group [2] 
    Group data  data.mean data.sd 
    <int> <chr>   <dbl>  <dbl> 
1  1 data1 20171205  0   
2  1 data2  0.00556 0.0000457 
3  1 data3  0.00556 0.0000457 
4  2 data1 20171205  0   
5  2 data2  0.00555 0.0000453 
6  2 data3  0.00555 0.0000453 

考えますデータ間の値の大きな違い& data2/data3、実際には同じグラフにすべてをプロットする方法はありません&は、後者に関連する小さな標準偏差を見ています。しかし、原則的に、あなたはこのような何か行うことができます(離れからのkの標準偏差を各データの平均値を表すためにポイントを使用して、&ライン範囲やエラーバーを意味する):

library(ggplot2) 

ggplot(dff %>% filter(data != "data1"), 
     aes(x = data, y = data.mean,color = data, 
      ymin = data.mean - data.sd, 
      ymax = data.mean + data.sd)) + 
    geom_point() + 
    geom_linerange() + 
    facet_grid(~Group) 

plot

関連する問題