r - 如何找到每个因子/水平的连续正值的平均数?
问题描述
我正在处理天气数据,并且每年我都想找到温度大于 0 的连续天数的平均值和标准偏差 (SD)。
我试过group_by
使用sequence
,但我不确定如何将计算连续天的平均值(或 SD)的需要与正温度结合起来。
这是数据的片段:
season<-c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3)
temp<-c(4,3,0,2,-1,2,2,2,-2,1,0,1,0,1,0)
df<-cbind(season,temp)
我想要一个表格,列出季节的平均值和连续正温度数的 SD,如下所示:
.
例如,在第 1 季中,前 2 天高于 0,第 4 天高于 0,因此均值 =(2+1)/2。
season consec_positive_mean consec_positive_SD
[1,] 1 1.5 0.5
[2,] 2 2.0 0.3
[3,] 3 1.0 0.0
我该如何解决这个问题?
解决方案
您可以创建第一个小功能:
ConsecMean <- function(x) {
x <- ifelse(x > 0, 0, 1)
cs <- cumsum(x)
cs <- cs[x == 0]
mean <- mean(table(cs))
return(mean)
}
ConsecSD <- function(x) {
x <- ifelse(x > 0, 0, 1)
cs <- cumsum(x)
cs <- cs[x == 0]
sd <- sd(table(cs))
return(sd)
}
然后使用group_by
from dplyr 应用它:
df %>%
group_by(season) %>%
summarise(mean = ConsecMean(temp), sd = ConsecSD(temp))
输出 :
# A tibble: 3 x 3
season mean sd
<dbl> <dbl> <dbl>
1 1 1.5 0.707
2 2 2 1.41
3 3 1 0
但是,我不确定在您的情况下如何计算 SD
推荐阅读
- java - java中的数组越界异常
- html - 当有滚动时,div覆盖不适用于整个页面
- dictionary - 将字典传递给数组python
- php - Bitcoind 返回错误“JSON 值不是预期的数组”,使用 easybitcoin.php 调用 sendmany()
- android - 从 Android 手机上的 android studio 运行后,应用程序只会打开和关闭。
- html - 填充内容div的剩余高度
- office365 - 可以将两个 Outlook Web 插件放在一组中
- java - 带有 Angular 5 的 Spring Boot Websocket 安全性
- windows - 如何使用 powershell 禁用防病毒和启用 Windows Defender
- python - 如何使用 Scikit-Learn 在 Python 中实现斐波那契数列?