r - 概率与大小成比例的随机样本
问题描述
我在一个统计项目中,我有一个单词表和每个单词在文本中的频率,我想要的是一个样本,结果是频率最高的单词
你好下午好,我希望有人可以帮助我。
我有一张带有单词的表格,以及每个单词在文本中出现的频率。
word <- c("banana", "watermelon", "water", "apple", "blue", "sky")
freq <- c("10", "2", "5", "8", "2", "1")
table < -cbind.data.frame(word,freq)
# word freq
# 1 banana 10
# 2 watermelon 2
# 3 water 5
# 4 apple 8
# 5 blue 2
# 6 sky 1
sample(table$freq,2)
# [1] 2 5
word <- c("banana", "watermelon", "water", "apple", "blue", "sky")
freq<- c("10", "2", "5", "8", "2", "1")
table<-cbind.data.frame(word,freq)
sample(table$freq,2)
我想要的是:
# [1] 10 8
解决方案
如果您想要基于您的freq
(转换为integer
)的单词加权概率,那么也许
sample(tb$freq, size = 2, prob = tb$freq)
让我们看看优先考虑我们认为应该得到的单词的趋势是什么。为了演示,我将word
根据它们进行采样freq
(因为这对我来说更有意义),您可以根据需要移动变量。
samps <- replicate(1000, sample(tb$word, size = 2, prob = tb$freq))
str(samps)
# chr [1:2, 1:1000] "water" "apple" "water" "banana" "watermelon" "banana" ...
sort(table(samps))
# samps
# sky watermelon blue water apple banana
# 93 151 166 370 572 648
该replicate
调用给了我们一个matrix
,因此对频率进行排序,我们发现这banana
比其他所有频率都更有可能。
我们可以看到比例大约是正确的
sort(table(samps)) / sum(table(samps))
# samps
# sky watermelon blue water apple banana
# 0.0465 0.0755 0.0830 0.1850 0.2860 0.3240
tb$pct <- tb$freq / sum(tb$freq)
tb <- tb[ order(tb$pct), ]
tb
# freq word pct
# 6 1 sky 0.03571429
# 2 2 watermelon 0.07142857
# 5 2 blue 0.07142857
# 3 5 water 0.17857143
# 4 8 apple 0.28571429
# 1 10 banana 0.35714286
数据
word <- c("banana", "watermelon", "water", "apple", "blue", "sky")
freq <- as.integer(c("10", "2", "5", "8", "2", "1"))
tb <- data.frame(freq, word)
推荐阅读
- php - 在 pre_get_posts 中更改查询后修复 found_posts - WordPress
- typescript - 有没有办法从可以返回多个的函数中返回特定类型?
- css - 具有缩放样式属性的 div 中的 Openlayers
- reactjs - 无法组合 withStyle、withWidth 和 injectIntl
- java - Spring boot mongo 数据查找存储库在有 hatos 时返回 Unsupported operation 错误
- microsoft-graph-api - 发出邀请时收到 403
- android - 在 Android 上使用 JUnit 和 Espresso 截取整个屏幕
- github - 如何让我的个人 github 代表我用 gitlab 所做的事情。这是可能的?
- powershell - 需要将 150+ 个文件从不同的网络文件夹复制到一个本地文件夹中
- c++ - std::get<0>(...) 和枚举索引