【问题标题】:randomly sampling of dataset to decrease the values in the dataset [closed]随机抽样数据集以减少数据集中的值[关闭]
【发布时间】:2021-09-30 04:02:12
【问题描述】:

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

ID 值

1 4
2 10
3 16

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

ID 值

1 1
2 8
3 1

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

谢谢

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

【问题讨论】:

    标签: r random downsampling


    【解决方案1】:

    使用样本数据

    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。

    【讨论】:

    • 但这并不能保证每个ID 都会包含在最终输出中。不过,OP 没有提到任何此类限制。
    • 是的。如果您只选择 10,某些 ID 可能不会出现,但如果这是一个约束,那么它就不会很“随机”
    • 我认为 op 想要传达的是,他们想要为每个观察(即保留所有行)分配一个小于原始值的新值(即“减少值”),所以新的 colSums 等于 10……但它的措辞有点混乱,不是很清楚。
    • 您好,感谢您的回答,是的,您是对的,我想我还不够清楚。我想要什么(就像你提到的那样),为每个观察(随机)分配一个低于原始值的新值,以便新的值总和等于 10。我将编辑我的问题。
    • 那么零是一个有效值吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 2017-08-25
    • 2019-10-02
    • 2014-09-15
    • 2011-08-19
    相关资源
    最近更新 更多