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

时间:2015-08-07 21:23:05

标签: r subset

这应该不会太难,但是当我在数据框中依赖于数据框中另一列的值的列上运行计算时,我总是遇到问题。这是我的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

我想计算一个列的平均值(比如说length.mstream = Brooks,然后对stream = Buncombe_Hollow执行相同的操作。我实际上有17个不同的流名称,并计划计算每个流的某些列的平均值。然后我将这些方法存储为向量,并bind将它们存储到流名称的另一个向量中,因此最终结果是这样的

    stream  truevalue
1   Brooks  0.9440620
2   Siouxon 0.5858527
3   Speelyai    0.5839844

谢谢!

2 个答案:

答案 0 :(得分:4)

尝试使用aggregate:

temp

“list”位的原因是具体命名(数据帧)输出中的列

答案 1 :(得分:2)

开始使用dplyr包。它使得这样的计算快速且易于编写

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