0

我试图在 R 中找到一种方法来随机子集一些数据(生态研究区域中合适栖息地的比例),计算值 > 0 的样本的平均值和比例,然后将这些值保存或附加到数据框中。然后我想重复多次(例如 1000 次)。标准引导或重采样包不起作用,因为我需要计算发生频率以及子样本的平均值。我知道“应用”函数,但是这些函数会在整个数据帧上循环,而我试图在重复的子样本上执行它。我知道我需要一些代码来获取循环中的计算值以保存和输出但有问题。“habprop”是数据框(“数据”)中的一列,我想计算并保存正值的平均值和比例。

for(i in 1000 {  
randsample=data[sample(1:nrow(data), 50, replace=FALSE),]
m=mean(randsample$habprop)
randsamplepos=subset(randsample, habprop > 0)
habfreq=(nrow(randsamplepos)/nrow(randsample))
})
4

2 回答 2

1

功能怎么样replicate这篇文章看起来很相似。

生成一些数据来处理

data <- data.frame(x1=rpois(5000, 5), x2=runif(5000), x3=rnorm(5000))

定义一个函数来采样和取平均值和计数

sample_stats <- function(df, n=100){
  df <- df[sample(1:nrow(df), n, replace=F),]
  mx1 <- mean(df$x1[df$x1>0])
  x1pos <- sum(df$x1>0)
  return(c(mx1, x1pos))
}

运行一次只是为了查看输出

sample_stats(data)

运行 1000 次

results <- replicate(1000, sample_stats(data, n=100))

于 2015-06-15T18:19:17.617 回答
0

使用boot这个应该是可能的

dat <- data.frame(habprop=rnorm(100))

## Function to return statistics from subsamples
stat <- function(dat, inds)
    with(dat, c(mu=mean(habprop[inds]), freq=sum(habprop[inds] > 0)/length(inds)))

library(boot)
boot(data=dat, statistic=stat, R=1000)

# Bootstrap Statistics :
#        original      bias    std. error
# t1* -0.06154533 -0.00324393  0.08377116
# t2*  0.52000000 -0.00073000  0.04853991
于 2015-06-15T18:30:06.687 回答