首页 > 解决方案 > 计算每列高于 R 中阈值范围的值的数量

问题描述

如何计算高于一系列阈值的每列值的数量?

即:为每一列计算大于100,然后大于150,然后大于...的值的数量......并将结果存储在数据框中?

# Reproductible data
# (Original data is daily streamflow values organized in columns per year)

set.seed(1234)
data = data.frame("1915" = runif(365, min = 60, max = 400),
                  "1916" = runif(365, min = 60, max = 400),
                  "1917" = runif(365, min = 60, max = 400))

# my code chunck

mymin = 75
mymax = 400
my step = 25

apply(data, 2, function (x) {
  for(i in seq(mymin,mymax,mystep)) {
    res = (sum(x > i)) # or nrow(data[x > i,])
    return(res)
  }
})

此代码适用于一次迭代,但我无法将每次迭代的结果存储在数据框中。

我还尝试了以下方法:

for (i in 1:n){
  seuil = seq(mymin, mymax, my step)
  lapply(data, function(x) {
    res [[i]] = nrow(data[ x > seuil[i], ])
    return(res)}
})

哪个不太好用...

输出将类似于:

n 值高于 75 n 值大于 100 n 值高于...
1915年 348 329 ...
1916年 351 325 ...
... ... ... ...

感谢您的意见和建议:)

标签: rloopsapplythreshold

解决方案


你可以试试 :

vals <- seq(mymin,mymax,mystep)
mat <- sapply(vals, function(x) sapply(data, function(y) sum(y > x)))
colnames(mat) <- paste0('values_above_', vals)
mat

#      values_above_75 values_above_100 values_above_125 values_above_150 values_above_175
#X1915             348              329              303              276              235
#X1916             351              325              305              277              252
#X1917             345              315              291              260              236

#      values_above_200 values_above_225 values_above_250 values_above_275 values_above_300
#X1915              212              186              153              126              104
#X1916              226              204              181              146              118
#X1917              208              186              161              133               99

#      values_above_325 values_above_350 values_above_375 values_above_400
#X1915               74               49               28                0
#X1916               92               62               40                0
#X1917               81               60               34                0

推荐阅读