R - 采样频率直方图:效率等

卢卡·维森廷

我是一名大学生,开始为考试探索 R。抱歉标题含糊不清,因为我有很多与这篇文章相关的问题。

我遇到了对男性(M)或女性(F)人群进行抽样的问题。我希望定义一个函数,该函数可以获取该群体中男性和女性的数量,然后创建sample.number大小样本sample.size并返回一个数据框,其中包含女性占样本总大小的样本比例,以及相关频率。

我很肯定有一种简单且经过优化的方法可以做到这一点,但我已经编写了一个小函数,它(勉强)起作用:

senators <- function(Fem = 13, 
                 Mal = 87, 
                 sample.size = 10, 
                 sample.number = 100){

pop <- c(rep("F", Fem), rep("M", Mal)) # I create the population base

popsa <- list(NA)           # I make some empty variables used later
popsa.factor <- list(NA)    # Not sure if this passage is even needed...
popsa.proportion <- list(NA)

这里来了一个for循环。我读过for循环确实是执行此操作的低效方法。有没有更好的办法?

for(i in 1:sample.number){
  popsa[[i]] <- sample(pop, sample.size, replace = TRUE)
  popsa.factor[[i]] <- table(factor(popsa[[i]], levels = c("M", "F")))
  popsa.proportion[[i]] <- popsa.factor[[i]][2]/sample.size
  }

我首先为列表的每个元素分配popsa一个样本,然后使用popsa每个样本创建一个表,并将其存储在popsa.factor. 然后我计算女性在总数中的比例并将其存储在popsa.proportion. 这个for循环对我来说似乎非常混乱,处理大量样本真的很慢。有没有更好,更有效的方法来做我在这里所做的事情?

popsa.unlisted <- unlist(popsa.proportion)
popsa.frequency <- table(popsa.unlisted)

popsa.frame <- data.frame(Level = as.numeric(names(popsa.frequency)), 
                          Freq =  as.numeric(popsa.frequency))
return(popsa.frame)
} # This closes the function call

然后我取消列表popsa.proportion以获取向量中的每个比例,并将这些值列出以获得频率,将它们存储到popsa.frequency. 现在,我尝试将因子popsa.frequency转换为数据框,方法是作弊并将其名称转换popsa.frequency为数字并将它们存储为数据框的第一列。该函数然后返回popsa.frame,如我所愿。

popsa.frame,尽管如此,仍保留popsa.frequency其第一列 ( Level) 中的因子属性我怎样才能改变这个?我是不是该?

由于这些是样本分布的频率,我想从这个数据帧创建一个直方图,尽管hist()只接受数字向量,所以popsa.frame不是一个有效的对象。plot(popsa.frame)不过,或多或少地返回了我想要的东西。如何创建这样的直方图?

编辑:按照下面的标记答案,我还想出了如何简单地将函数创建的数据框转换为一个hist()可以实际用来创建频率直方图的对象(尽管使用条形图会产生或多或少相同的图形,并且可能是显示此类结果的更统计正确的方法):

result <- senators(Fem=13,Mal=87,sample.size=50,sample.number=10000)

raw <- sapply(1:length(result$Level), function(x){
  rep(result$Level, result$Freq)
})

hist(raw)
戴夫2e

列表和 for 循环的创建存在一些性能瓶颈。我能够用来sapply删除for loop和一些临时变量。

我仍在返回数据名声,另一个选项将返回向量答案,只需将结果传递给最终绘图的直方图绘图函数。

senators <- function(Fem = 13, 
                     Mal = 87, 
                     sample.size = 10, 
                     sample.number = 100){

  pop <- c(rep("F", Fem), rep("M", Mal)) # I create the population base

  answer<-sapply(1:sample.number, function(x){popsa <- sample(pop, sample.size, replace = TRUE);
                                            length(popsa[popsa=="F"])/sample.size})

popsa.frequency <- table(answer)

popsa.frame <- data.frame(Level = as.numeric(names(popsa.frequency)), 
                          Freq =  as.numeric(popsa.frequency))
return(popsa.frame)
} 

senators()   

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

R中的相对频率直方图,ggplot

来自分类Dev

R:如何将频率直方图的X和Y轴相乘

来自分类Dev

如何用R中的点填充频率直方图的每一列?

来自分类Dev

频率直方图,For 循环

来自分类Dev

C ++中的频率直方图

来自分类Dev

为因子变量制作频率直方图

来自分类Dev

R重合正态曲线到概率直方图

来自分类Dev

总和的直方图而不是频率-R

来自分类Dev

使用两个属性的组合频率直方图

来自分类Dev

无法操纵频率直方图中的 bin 数量

来自分类Dev

如何在matlab中创建相对频率直方图?

来自分类Dev

R中每月频率的简单绘图直方图

来自分类Dev

如何基于频率在R中绘制直方图

来自分类Dev

R:如何使用自定义频率对行进行采样

来自分类Dev

强制R将直方图绘制为概率(相对频率)

来自分类Dev

r在重叠的直方图和密度图上的频率计数

来自分类Dev

R 直方图,通过 y 值(频率)找到 x 值的范围

来自分类Dev

如何生成单词频率直方图,其中条形根据其高度排序

来自分类Dev

叠加频率直方图以显示每个其他样本后的变化

来自分类Dev

ggplot2中多个二进制列的频率直方图?

来自分类Dev

如何使用R轴上的频率以外的变量在R中的直方图中分组的bin?

来自分类Dev

使用带有频率计数的表中的R绘制饼图和直方图

来自分类Dev

使用ggplot在R中具有非整数频率的多个直方图

来自分类Dev

如何使用线在R的直方图顶部叠加频率多边形?

来自分类Dev

为每个唯一的用户ID创建一个直方图频率向量R

来自分类Dev

将多个直方图频率计数转换为R中的数组

来自分类Dev

使用R如何在垂直轴上创建具有相对频率的直方图?

来自分类Dev

R函数效率

来自分类Dev

R加权采样程序

Related 相关文章

热门标签

归档