如何计算从数据中子集化的列的平均值
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))
这不应该太难,但是在依赖于数据框中另一列的值的数据框中的列上绑定 运行 计算时,我总是遇到问题。这是我的 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))