如何为数据帧中每m列的每n行计算不同的统计信息

时间:2019-05-03 15:22:54

标签: r statistics

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

我找到了StackOverflow post already,但是它不适用于我的所有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

2 个答案:

答案 0 :(得分:0)

我不确定我是否完全遵循您的要求-但您可以在循环中使用索引。该循环每隔第二列获取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 )

答案 1 :(得分:0)

我还通过以下几种不同方式组合了来自多个地方的代码,并得出了很好的结论:

n = 7
sidx = seq.int(from=1, to=nrow(dataset), by=n)
eidx = c((sidx-1)[2:length(sidx)], nrow(dataset))
# cerate a data frame
k=data.frame(matrix(nrow = 12,ncol = 48))

for (i in 1:12){
   for(j in 1:12){
      k[i,(4*j)-3]=apply(dataset[sidx[i]:eidx[i],(4*j)-1],2, sum)
      k[i,(4*j)-2]=apply(dataset[sidx[i]:eidx[i],(4*j)], 2,sum)
      k[i,(4*j)-1]=apply(dataset[sidx[i]:eidx[i],(4*j)+1], 2,min)
      k[i,(4*j)]=apply(dataset[sidx[i]:eidx[i],(4*j)+2], 2,max)
 }
}
View(k)