0

列が 2 つしかなく、行数が非常に多い R のデータフレームを扱っています。データフレームをそれぞれ「m」行のサブセットに分割し、データフレームの各分割についてこれらの m 行ごとに列の値の平均を見つけてから、「m」を含むすべての分割についてこれらの平均値を返したい' 行ごとに。

私のデータフレームが列「a」と「b」を持つyであり、この場合「m」を1000にしたいとします。

mean(y[i:i+999,2]) を見つけたい

すべての行で i の値を取得し、平均値を返したいと思います。この場合、列 'b' の 1000 値の各ブロック

i=1
add=function(i,999){i=i+999}
z=return(i)
p=mean(y[z,2])

私はそれを間違っていると思います。洞察はありますか?

4

3 に答える 3

1

を使用するのが最速のオプションであり、「グループ化」の構文は非常に直感的data.tableだと思います。by=

library(data.table)

# Sample data:
dt<-data.table(A=runif(1e6L), B=runif(1e6L), key="B")

# Note that keying by column B will order the rows by B;
# You can leave out the key if you don't care about the order
# or have already set it

# Average every 1000 records in column B:
dt[,list(avg=mean(B)),by=rep(1L:nrow(dt),each=1000L,length.out=nrow(dt))]

ソリューションの 48 秒以上に比べて、これには約 10 分の 1 秒かかりましたrollaply

于 2013-05-12T02:37:39.893 に答える