如何计算从数据中子集化的列的平均值

How to calculate the mean for a column subsetted from the data

这不应该太难,但是在依赖于数据框中另一列的值的数据框中的列上绑定 运行 计算时,我总是遇到问题。这是我的 data.frame

          stream      reach length.km length.m total.sa pools.sa
1           Stream Reach_Code       109      109        1        1
2           Brooks    BRK_001        17       14      108       13
3           Brooks    BRK_002        15       12       99        9
4           Brooks    BRK_003        24       21       94       95
5           Brooks    BRK_004        32       29       97       33
6           Brooks    BRK_005        27       24       92       79
7           Brooks    BRK_006        26       23       95        6
8           Brooks    BRK_007        16       13       77       15
9           Brooks    BRK_008        29       26       84       26
10          Brooks    BRK_009        18       15       87       46
11          Brooks    BRK_010        23       20       88       47
12          Brooks    BRK_011        22       19       91       40
13          Brooks    BRK_012        30       27       98       37
14          Brooks    BRK_013        25       22       93       29
19 Buncombe_Hollow   BNH_0001         7        4       75       65
20 Buncombe_Hollow   BNH_0002         8        5       66       21
21 Buncombe_Hollow   BNH_0003         9        6       68       53
22 Buncombe_Hollow   BNH_0004        19       16       81       11
23 Buncombe_Hollow   BNH_0005         6        3       65       27
24 Buncombe_Hollow   BNH_0006        13       10       63       23
25 Buncombe_Hollow   BNH_0007        12        9       71       57

我想计算 stream = Brooks 列的平均值(比方说 length.m),然后对 stream = Buncombe_Hollow 做同样的事情。我实际上有 17 个不同的流名称,并计划计算每个流的某些列的平均值。然后我会将这些方法存储为一个向量,bind 将它们存储到流名称的另一个向量中,所以最终结果是这样的

    stream  truevalue
1   Brooks  0.9440620
2   Siouxon 0.5858527
3   Speelyai    0.5839844

谢谢!

尝试使用聚合:

# Generate some data to use
someDf <- data.frame(stream = rep(c("Brooks", "Buncombe_Hollow"), each = 10),
  length.m = rpois(20, 4))

# Calculate the means with aggregate
with(someDf, aggregate(list(truevalue = length.m), list(stream = stream), mean))

"list" 位的原因是专门命名(数据框)输出中的列

开始使用 dplyr 包。它使此类计算变得快速且非常容易编写

library(dplyr)
result <- data %>% group_by(stream) %>% summarize(truevalue = mean(length.m))