汇总数据框并添加平均值为 ± SD 的列
summarizing a dataframe and adding column with mean ± SD
我有一个数据框,其中包含 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。类似于下面的 table。
我在想 dcast
但我不确定如何获得平均值 ± SD
在 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
编辑:
如果您想要所有 species/locations 的结果,您可以使用
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
我有一个数据框,其中包含 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。类似于下面的 table。
我在想 dcast
但我不确定如何获得平均值 ± SD
在 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
编辑:
如果您想要所有 species/locations 的结果,您可以使用
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