按R中的名称或行号计算的多行平均数
R中的数据集如下所示:按R中的名称或行号计算的多行平均数,r,R,R中的数据集如下所示: LD.D LD.L LD.P Y.1992.a1 67.89552605 33.21192862 90.7750688 Y.1992.a2 227.1370541 79.67211036 154.5165077 Y.1992.a3 94.5326718 24.72816922 151.665545 Y.1992.a4 106.8793485 56.07635245 100.6711004 Y.
LD.D LD.L LD.P
Y.1992.a1 67.89552605 33.21192862 90.7750688
Y.1992.a2 227.1370541 79.67211036 154.5165077
Y.1992.a3 94.5326718 24.72816922 151.665545
Y.1992.a4 106.8793485 56.07635245 100.6711004
Y.1992.a5 97.41402289 46.93434073 100.8787496
Y.1993.a1 150.045093 19.64290196 27.81953228
Y.1993.a2 106.5888189 21.38886866 84.82532249
Y.1993.a3 110.7493543 25.41765759 70.02222315
Y.1993.a4 237.1246502 16.43006029 75.17407065
Y.1993.a5 234.5403261 16.93082727 49.01639754
Y.1994.a1 94.5326718 24.72816922 151.665545
Y.1994.a2 106.8793485 56.07635245 100.6711004
Y.1994.a3 97.41402289 46.93434073 100.8787496
Y.1994.a4 150.045093 19.64290196 27.81953228
Y.1994.a5 106.5888189 21.38886866 84.82532249
每年我有五次复制。问题是我如何能得到每一年(例如,1992年、1993年和1994年)的航程 您可以使用
base R
或使用专门的包,如dplyr
或data.table
(数据集非常大时效率更高)
或者使用base R
。有不同的方法,如聚合、按、拆分等。这里有一种方法是按。使用regex
(lookback)获取年份
。在本例中,我得到了Y
前缀,因为它不会影响结果
Year <- gsub("(?<=[0-9])\\..*$", "", row.names(df), perl=TRUE)
do.call(`rbind`,by(df, Year, FUN= colMeans, na.rm=TRUE))
# LD.D LD.L LD.P
#Y.1992 118.7717 48.12458 119.70139
#Y.1993 167.8096 19.96206 61.37151
#Y.1994 111.0920 33.75413 93.17205
YearTryaggregate
其中DF
是数据帧:
aggregate(DF, list(Year = gsub("^Y.|.[^.]*$", "", rownames(DF))), mean)
Year <- gsub("(?<=[0-9])\\..*$", "", row.names(df), perl=TRUE)
do.call(`rbind`,by(df, Year, FUN= colMeans, na.rm=TRUE))
# LD.D LD.L LD.P
#Y.1992 118.7717 48.12458 119.70139
#Y.1993 167.8096 19.96206 61.37151
#Y.1994 111.0920 33.75413 93.17205
df <- structure(list(LD.D = c(67.89552605, 227.1370541, 94.5326718,
106.8793485, 97.41402289, 150.045093, 106.5888189, 110.7493543,
237.1246502, 234.5403261, 94.5326718, 106.8793485, 97.41402289,
150.045093, 106.5888189), LD.L = c(33.21192862, 79.67211036,
24.72816922, 56.07635245, 46.93434073, 19.64290196, 21.38886866,
25.41765759, 16.43006029, 16.93082727, 24.72816922, 56.07635245,
46.93434073, 19.64290196, 21.38886866), LD.P = c(90.7750688,
154.5165077, 151.665545, 100.6711004, 100.8787496, 27.81953228,
84.82532249, 70.02222315, 75.17407065, 49.01639754, 151.665545,
100.6711004, 100.8787496, 27.81953228, 84.82532249)), .Names = c("LD.D",
"LD.L", "LD.P"), class = "data.frame", row.names = c("Y.1992.a1",
"Y.1992.a2", "Y.1992.a3", "Y.1992.a4", "Y.1992.a5", "Y.1993.a1",
"Y.1993.a2", "Y.1993.a3", "Y.1993.a4", "Y.1993.a5", "Y.1994.a1",
"Y.1994.a2", "Y.1994.a3", "Y.1994.a4", "Y.1994.a5"))
aggregate(DF, list(Year = gsub("^Y.|.[^.]*$", "", rownames(DF))), mean)