首页 > 解决方案 > 随机抽样数据集以减少数据集中的值

问题描述

我目前正在尝试根据给定的总和随机减少列中的值。例如,如果主要数据是这样的;

标识值

1 4
2 10
3 16

运行代码后,值的总和应该是 10,这需要随机完成(每个成员的减少应该随机选择)

标识值

1 1
2 8
3 1

尝试了几个命令和库,但无法管理它。仍然是新手,任何帮助将不胜感激!

谢谢

编辑:对不起,我不够清楚。我想为每个小于原始值的观察值分配一个新值(随机)。最后,新的价值总和将等于 10

标签: rrandomdownsampling

解决方案


使用样本数据

dd <- read.table(text="ID Value
1 4
2 10
3 16", header=TRUE)

dplyr+tidyr库,你可以做

library(dplyr)
library(tidyr)

dd %>% 
  mutate(ID=factor(ID)) %>% 
  uncount(Value) %>%
  sample_n(10) %>% 
  count(ID, name = "Value", .drop=FALSE)

在这里,我们为每个 重复该行一次Value,然后我们随机抽取 10 行,然后将它们重新计数。我们将 ID 转换为一个因子,以确保保留 0 个观测值的 ID。


推荐阅读