Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按R中的名称或行号计算的多行平均数_R - Fatal编程技术网

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

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

YearTry
aggregate
其中
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)