r - 来自 data.table 的样本
问题描述
我有一些 data.table 我想从中选择一个随机子集,但仅用于某些操作。
假设数据是
dat <- data.table(id=1:100, group=sample(1:20,100, replace=TRUE), a=runif(100), b=rnorm(100))
我想做两件事:
- 计算每组 id 的数量
- 从每个组中随机选择一个 id 并将其值记录
a
在b
我可以关注How do you extract a few random rows from a data.table on the fly并选择
dat[n=.N, a=a[sample(.N,1)], b=b[sample(.N,1)], group]
但我担心,这将a
彼此b
独立选择。有没有办法选择相同的?
解决方案
第1部分
如果要计算唯一 id 的数量并且某些 id 在组内重复
dat[, .(n_ids = uniqueN(id)), group]
如果 id 不在组内重复,或者您不想在唯一的基础上计算它们
dat[, .(n_ids = .N), group]
第2部分
如果 id 在组内重复,并且您希望返回每个组中随机选择的 id 的所有行
dat[dat[, .(id = sample(id, 1)), group], on = .(id, group)]
如果 ids 不重复,或者你只想要每组一行
dat[dat[, sample(.I, 1), group]$V1]
感谢 Frank 的评论,您还可以在一行中为上面的第 1 部分和第 2 部分执行第二个选项。这会返回类似的行,dat[dat[, sample(.I, 1), group]$V1]
但还会添加一列N
显示 id 的数量(假设等于组中的行数)
dat[sample(.N), c(.SD[1], .N), keyby=group]
推荐阅读
- dynamic - 如何在 SpringRouteBuilder 中路由到 Camelhttpquery 中包含的动态 uri?
- docker - docker compose 总是构建 Dockerfile,因此它不依赖于 db
- c++ - 仅允许 QWidget 大小可被特定值整除
- visual-studio - SFTP 连接不支持的密钥格式
- reactjs - 带有反应传单的错误显示
- javascript - 从 html 中的打字稿调用函数不起作用
- pandas - Pandas max dayofyear 逐年
- python - 无法使用 Python 的 Dispatch("TDApiOle80.TDConnection") 对象连接到 HP ALM 12.55
- python - 使用 django-semanticui-forms 渲染表单并与选择字段的工作方式相混淆
- r - R:如何从一列中创建额外的行?