【问题标题】:summarizing a dataframe and adding column with mean ± SD [duplicate]总结数据框并添加具有平均值±SD的列[重复]
【发布时间】:2020-10-28 00:35:15
【问题描述】:

我有一个包含 2 个不同位置的 11 种豆类的许多变量(土壤特性)的数据框。数据的前几列如下所示。

 SPECIES   LOCATION   pH   NO3  NH4    P Organic_C      K   Cu    Mn   Zn   BD X.Sand X.Silt X.Clay
1    C. comosa    Gauteng 5.40  8.24 1.35 1.10      0.95  94.40 3.36 84.40 4.72 1.45   68.0     12      9
2    C. comosa    Gauteng 5.25  8.36 1.37 1.20      0.99  94.87 3.39 84.87 4.77 1.36   76.0     16     13
3    C. comosa    Gauteng 5.55  8.19 1.32 1.11      0.94  94.01 3.35 84.01 4.68 1.54   78.0     14     14
4    C. comosa Mpumalanga 5.84  4.05 3.46 3.04      1.55 130.40 0.28 25.43 2.00 1.66   73.6      9     10
5    C. comosa Mpumalanga 5.49  4.45 3.48 3.09      1.53 131.36 0.27 25.35 2.12 1.45   76.5     11     16
6    C. comosa Mpumalanga 6.19  4.43 3.44 3.04      1.58 129.95 0.29 25.45 2.14 1.87   74.9     13     16
7   C. distans    Gauteng 5.48  8.88 1.96 3.33      0.99 130.24 0.99 40.01 3.94 1.55   70.0      8     11
8   C. distans    Gauteng 5.29  8.54 1.99 3.28      0.99 130.28 0.95 40.25 3.89 1.48   79.0     12     15
9   C. distans    Gauteng 5.67  8.63 1.93 3.39      1.02 130.30 0.98 40.12 3.97 1.62   79.0     10     16
10  C. distans Mpumalanga 5.61  6.02 2.65 4.45      2.58 163.25 1.79 53.11 6.11 1.68   72.0      8     10
11  C. distans Mpumalanga 5.43  6.58 2.55 4.49      2.59 163.55 1.78 52.89 6.04 1.63   78.0     15     14
12  C. distans Mpumalanga 5.79  6.24 2.59 4.41      2.59 163.27 1.75 53.03 6.19 1.73   75.0     16     12
13 E. cordatum    Gauteng 4.38 16.29 5.76 4.77      3.25 175.38 1.11 35.87 8.54 1.53   33.0      9     40
14 E. cordatum    Gauteng 4.05 16.15 5.63 4.73      3.29 175.90 1.23 34.34 8.61 1.42   45.0     13     50
15 E. cordatum    Gauteng 4.71 15.89 5.99 4.80      3.25 174.54 1.19 36.44 8.58 1.64   42.0     14     54

对于每个位置,我想总结数据,使土壤特性在第一列,而豆类在其他列,每个值报告为平均值 ± SD。类似于下表。

我在想dcast,但我不确定如何将值作为平均值 ± SD

【问题讨论】:

    标签: r dplyr knitr data-cleaning dcast


    【解决方案1】:

    在 Base R 中,这为您提供了准确的输出,但您随后失去了(轻松)提取数字的能力。如果您以后想对数据进行更多操作,还有更好的方法来存储数据。

    as.data.frame(t(aggregate(. ~ LOCATION, df[,-1], function(x) paste(round(mean(x),2),"±", round(sd(x),2)))))
    
                          V1             V2
    LOCATION         Gauteng     Mpumalanga
    pH           5.09 ± 0.57    5.72 ± 0.28
    NO3         11.02 ± 3.83     5.29 ± 1.1
    NH4          3.03 ± 2.09    3.03 ± 0.47
    P            3.08 ± 1.58    3.75 ± 0.76
    Organic_C    1.74 ± 1.14    2.07 ± 0.57
    K         133.32 ± 35.08 146.96 ± 17.96
    Cu           1.84 ± 1.15    1.03 ± 0.82
    Mn         53.37 ± 23.39  39.21 ± 15.12
    Zn           5.74 ± 2.15     4.1 ± 2.21
    BD           1.51 ± 0.09    1.67 ± 0.14
    X.Sand     63.33 ± 18.18      75 ± 2.11
    X.Silt          12 ± 2.6      12 ± 3.22
    X.Clay     24.67 ± 17.99      13 ± 2.76
    

    编辑:

    如果您想要所有物种/位置的结果,您可以使用

    as.data.frame(t(aggregate(. ~ SPECIES + LOCATION, df, function(x) paste(round(mean(x),2),"±", round(sd(x),2)))))
    
                        V1            V2            V3            V4            V5
    SPECIES      C. comosa    C. distans   E. cordatum     C. comosa    C. distans
    LOCATION       Gauteng       Gauteng       Gauteng    Mpumalanga    Mpumalanga
    pH          5.4 ± 0.15   5.48 ± 0.19   4.38 ± 0.33   5.84 ± 0.35   5.61 ± 0.18
    NO3        8.26 ± 0.09   8.68 ± 0.18   16.11 ± 0.2   4.31 ± 0.23   6.28 ± 0.28
    NH4        1.35 ± 0.03   1.96 ± 0.03   5.79 ± 0.18   3.46 ± 0.02    2.6 ± 0.05
    P          1.14 ± 0.06   3.33 ± 0.06   4.77 ± 0.04   3.06 ± 0.03   4.45 ± 0.04
    Organic_C  0.96 ± 0.03      1 ± 0.02   3.26 ± 0.02   1.55 ± 0.03   2.59 ± 0.01
    K         94.43 ± 0.43 130.27 ± 0.03 175.27 ± 0.69 130.57 ± 0.72 163.36 ± 0.17
    Cu         3.37 ± 0.02   0.97 ± 0.02   1.18 ± 0.06   0.28 ± 0.01   1.77 ± 0.02
    Mn        84.43 ± 0.43  40.13 ± 0.12  35.55 ± 1.09  25.41 ± 0.05  53.01 ± 0.11
    Zn         4.72 ± 0.05   3.93 ± 0.04   8.58 ± 0.04   2.09 ± 0.08   6.11 ± 0.08
    BD         1.45 ± 0.09   1.55 ± 0.07   1.53 ± 0.11   1.66 ± 0.21   1.68 ± 0.05
    X.Sand       74 ± 5.29      76 ± 5.2     40 ± 6.24     75 ± 1.45        75 ± 3
    X.Silt          14 ± 2        10 ± 2     12 ± 2.65        11 ± 2     13 ± 4.36
    X.Clay       12 ± 2.65     14 ± 2.65     48 ± 7.21     14 ± 3.46        12 ± 2
    

    如果你真的只想要一个可以使用的位置。

    as.data.frame(t(aggregate(. ~ SPECIES,df[df$LOCATION == "Gauteng",-2], function(x) paste(round(mean(x),2),"±", round(sd(x),2)))))
    
                        V1            V2            V3
    SPECIES      C. comosa    C. distans   E. cordatum
    pH          5.4 ± 0.15   5.48 ± 0.19   4.38 ± 0.33
    NO3        8.26 ± 0.09   8.68 ± 0.18   16.11 ± 0.2
    NH4        1.35 ± 0.03   1.96 ± 0.03   5.79 ± 0.18
    P          1.14 ± 0.06   3.33 ± 0.06   4.77 ± 0.04
    Organic_C  0.96 ± 0.03      1 ± 0.02   3.26 ± 0.02
    K         94.43 ± 0.43 130.27 ± 0.03 175.27 ± 0.69
    Cu         3.37 ± 0.02   0.97 ± 0.02   1.18 ± 0.06
    Mn        84.43 ± 0.43  40.13 ± 0.12  35.55 ± 1.09
    Zn         4.72 ± 0.05   3.93 ± 0.04   8.58 ± 0.04
    BD         1.45 ± 0.09   1.55 ± 0.07   1.53 ± 0.11
    X.Sand       74 ± 5.29      76 ± 5.2     40 ± 6.24
    X.Silt          14 ± 2        10 ± 2     12 ± 2.65
    X.Clay       12 ± 2.65     14 ± 2.65     48 ± 7.21
    

    【讨论】:

    • 谢谢你。我希望首先过滤数据,例如 LOCATION == “Gauteng”,然后汇总土壤特性和 SPECIES。从您的结果来看,第一列还可以,但我希望其他列是 SPECIES
    • 我给了你更多的选择。
    • 您好丹尼尔,感谢您的帮助。是的,我想对数据做更多的事情。我想使用方差分析测试aovTukeyHSD 来测试显着差异。那是使用仅按位置聚合的数据框(您的答案中的最后一个数据框),我想测试豆类之间 pH 值(和其他属性)的显着性差异。
    • 我提供的大部分代码只是为了获得您要求的确切格式。如果你想要可用的数据。你真正需要的是。 aggregate(. ~ SPECIES, df[df$LOCATION == "Gauteng",-2], mean)
    猜你喜欢
    • 2020-12-26
    • 2014-01-14
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多