首页 > 解决方案 > 如何为数据框中每 m 列的每 n 行计算不同的统计信息

问题描述

我有一个包含 84 行和 48 列的数据框,并且希望在每 7 行中为每 4 个连续列计算以下统计信息: sum sum min max 每个对应于一列,然后跳转到 48 的其他 4 列data.frame 的列。

我已经找到了StackOverflow 帖子,但它不适用于我的所有 data.frame。它只适用于每一列,每列每次只做一个统计。

v=dataset$count
n = 7
sidx = seq.int(from=1, to=length(v), by=n)
eidx = c((sidx-1)[2:length(sidx)], length(v))
thesum = sapply(1:length(sidx), function(i) sum(v[sidx[i]:eidx[i]]))
thesum
 [1] 10957 10955 10953 10955 10954 10955 10957 10956 10958 10953 10954    10956

标签: rstatistics

解决方案


我不确定我是否完全符合您的要求 - 但您可以在循环中使用索引。此循环每隔一列获取 7 行的汇总统计信息。

#making example data
ir <- iris[ 1:84 , 1:4]
ir <- do.call(cbind,  rep( ir, 12))

# this is the size you specfied
dim( ir )

FINAL <- NULL

# For every set of seven rows
for( i in seq( 1 , nrow( ir) , 7 ) ){
# For every set of four columns
OUT <- NULL
    for( j in seq( 1 , ncol( ir) , 4 ) ){


      out <- cbind(
        sum1 =  sum(  ir[ i:(i+6) ,  j ]  ),
        sum2 =  sum(  ir[ i:(i+6) ,  j+1 ]  ),
        min1 =  min(  ir[ i:(i+6) ,  j+2 ]  ),
        max1 =  max(  ir[ i:(i+6) ,  j+3 ]  )
      )

     OUT <- cbind( OUT , out )

}

    FINAL <- rbind( OUT , FINAL)
}

#output object match your specification
dim( FINAL )

推荐阅读