我试图得到我的 Dataframe 中所有变量的三分位数的长期平均值。基本上,我想要每个变量的三分位数的平均值。下面是第二个三分位数的例子。
数据结构:
DOY city P BP prune Tmax
100 Bechem 1.283868 0.001742587 1.00 29.07214
123 Bechem 0.000000 0.002593004 0.02 30.42596
345 Bechem 0.000000 0.421595923 0.02 30.03821
100 Bechem 1.283868 0.001742587 1.00 29.07214
123 Bechem 0.000000 0.002593004 0.02 30.42596
345 Bechem 0.000000 0.393785818 0.02 29.03066
100 Bechem 1.283868 0.001742587 1.00 29.07214
123 Bechem 0.000000 0.002593004 0.02 30.42596
345 Bechem 0.000000 0.174428952 0.02 32.00171
100 Bechem 1.283868 0.001742587 1.00 29.07214
我现在做的是:
Fun_tertile_mean <- function(x,i){
quantile<-quantile(x, c(0:3/3))
datum <- mean(x[x<= quantile[i] & x>quantile[i-1]],na.rm = TRUE)
return(datum)
}
Data_General_2tertile <- Data_General[Data_General$yr_prjctd %in% c(2010,2011,2012,2013,2014,2015),] %>%
group_by(city) %>%
group_by(DOY) %>%
select_if(is.numeric) %>%
summarise_all(function(x) Fun_tertile_mean(x,3))
我得到了一个充满NaN和一些值的 Dataframe ,我不明白我定义的函数中是否有什么错误,group_by()和summarise_all()之间的交互是否有错误。
任何提示或帮助都非常感谢!
1条答案
按热度按时间n9vozmp41#
您好,欢迎来到SO!
我认为问题是你得到的三分位数极限是相等的。如果是这样的话,你会得到一个
NaN
作为平均值的结果。下面是一个iris
的例子:一种解决方案是使用
ifelse
,并取值而不是平均值:希望能有所帮助