条件计算平均每月每年dplyr
Conditional calculation of mean per month per year dplyr
我有很长一段时间内多个流的流化学大数据集(7-20 年的数据价值)。我想获得每个站点每年的每月 TOC 值,但有时给定月份只有 1 个 TOC 值,而其他月份有 2 个或更多。当我使用总结(下面的示例)时,我得到的实例只有 1 个 TOC 值。
df_TOC <- df %>% group_by(Site,Year, Month) %>% summarise(AvgTOC=mean(TOC))
我想要一些关于如何使用条件语句总结数据的帮助:
如果TOC每月有2个或更多个值,则计算平均值;如果不是,则粘贴该月的单个值。
Site Month Year TOC
AAA Jan 1975 5
AAA Feb 1975 7
AAA Feb 1975 8
AAA March 1975 10
AAA March 1975 12
AAA April 1975 13
BBB Jan 1975 6
BBB Jan 1975 3
BBB Feb 1975 6
BBB Feb 1975 12
BBB Feb 1975 17
BBB March 1975 4
您的代码已经完全符合您的要求。单个值的平均值就是该值本身。
myData = read.table(textConnection("Site Month Year TOC
AAA Jan 1975 5
AAA Feb 1975 7
AAA Feb 1975 8
AAA March 1975 10
AAA March 1975 12
AAA April 1975 13
BBB Jan 1975 6
BBB Jan 1975 3
BBB Feb 1975 6
BBB Feb 1975 12
BBB Feb 1975 17
BBB March 1975 4"), header = TRUE)
library(dplyr)
df_TOC = myData %>% group_by(Site,Year, Month) %>% summarise(AvgTOC=mean(TOC))
> df_TOC
## A tibble: 7 x 4
## Groups: Site, Year [?]
# Site Year Month AvgTOC
# <fctr> <int> <fctr> <dbl>
#1 AAA 1975 April 13.00000 #<<<
#2 AAA 1975 Feb 7.50000
#3 AAA 1975 Jan 5.00000 #<<< These ones come from an single sample each
#4 AAA 1975 March 11.00000
#5 BBB 1975 Feb 11.66667
#6 BBB 1975 Jan 4.50000
#7 BBB 1975 March 4.00000 #<<<
我是基本 R 函数的忠实拥护者 aggregate
,从评论看来,您可能有导致 NA 的 NA 值——因为单个值的平均值应该就是价值。试用:
aggregate(x = list(TOC_avg = myData$TOC), by = myData[,-4], mean, na.rm = T)
这里我们使用list()
命名结果聚合值,数据中的第4列是原始TOC列。
我有很长一段时间内多个流的流化学大数据集(7-20 年的数据价值)。我想获得每个站点每年的每月 TOC 值,但有时给定月份只有 1 个 TOC 值,而其他月份有 2 个或更多。当我使用总结(下面的示例)时,我得到的实例只有 1 个 TOC 值。
df_TOC <- df %>% group_by(Site,Year, Month) %>% summarise(AvgTOC=mean(TOC))
我想要一些关于如何使用条件语句总结数据的帮助:
如果TOC每月有2个或更多个值,则计算平均值;如果不是,则粘贴该月的单个值。
Site Month Year TOC
AAA Jan 1975 5
AAA Feb 1975 7
AAA Feb 1975 8
AAA March 1975 10
AAA March 1975 12
AAA April 1975 13
BBB Jan 1975 6
BBB Jan 1975 3
BBB Feb 1975 6
BBB Feb 1975 12
BBB Feb 1975 17
BBB March 1975 4
您的代码已经完全符合您的要求。单个值的平均值就是该值本身。
myData = read.table(textConnection("Site Month Year TOC
AAA Jan 1975 5
AAA Feb 1975 7
AAA Feb 1975 8
AAA March 1975 10
AAA March 1975 12
AAA April 1975 13
BBB Jan 1975 6
BBB Jan 1975 3
BBB Feb 1975 6
BBB Feb 1975 12
BBB Feb 1975 17
BBB March 1975 4"), header = TRUE)
library(dplyr)
df_TOC = myData %>% group_by(Site,Year, Month) %>% summarise(AvgTOC=mean(TOC))
> df_TOC
## A tibble: 7 x 4
## Groups: Site, Year [?]
# Site Year Month AvgTOC
# <fctr> <int> <fctr> <dbl>
#1 AAA 1975 April 13.00000 #<<<
#2 AAA 1975 Feb 7.50000
#3 AAA 1975 Jan 5.00000 #<<< These ones come from an single sample each
#4 AAA 1975 March 11.00000
#5 BBB 1975 Feb 11.66667
#6 BBB 1975 Jan 4.50000
#7 BBB 1975 March 4.00000 #<<<
我是基本 R 函数的忠实拥护者 aggregate
,从评论看来,您可能有导致 NA 的 NA 值——因为单个值的平均值应该就是价值。试用:
aggregate(x = list(TOC_avg = myData$TOC), by = myData[,-4], mean, na.rm = T)
这里我们使用list()
命名结果聚合值,数据中的第4列是原始TOC列。