首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >条件分布抽样

条件分布抽样
EN

Stack Overflow用户
提问于 2019-07-15 07:46:49
回答 1查看 34关注 0票数 1

我正在研究一个数据集,供学生练习假设测试。该数据应包含虚拟处理时间,以生产一辆建筑设备车辆。车辆有不同的类型和不同的选项,可能会影响处理时间。根据加工时间和机器规格,学生将调查哪些因素对加工时间有显著影响,并预测生产具有特定配置的特定机器所需的时间。

数据集的最终目标是生成每台机器的总处理时间。从本质上说,(总)处理时间应该是一个基本时间+选项1时间+选项2时间+选项3时间+等的积累。…。每个选项都要从一个分布中随机抽样,这样就不会太明显了。只有总时间将提供给学生,但我需要选择时间来构建总时间。

我知道如何使用rnorm()和其他分配进行随机抽样。但我不知道如何只根据列的内容有条件地生成数据。

数据集看起来如下所示。

代码语言:javascript
复制
Machine                  <-   c(1,2,3,4,5,6,7,8,9,10)
Pump.Option              <-   c("30 Liter", "40 Liter", "30 Liter", "30 Liter", "30 Liter", "30 Liter", "50 Liter", "30 Liter", "30 Liter", "40 Liter")
Piping.Option            <-   c("No special piping", "No special piping", "special piping", "No special piping", "special piping", "No special piping", "No special piping", "special piping", "special piping", "No special piping")
Lights.Option            <-   c("Std light", "Std & Addional", "Std & Addional","Std & Addional", "Std & Addional", "Std & Addional", "Std light", "Std & Addional", "Std & Addional", "Std & Addional")
Valve.Option             <-   c("Safety valve", "Safety valve", "Normal valve", "Normal valve", "Safety valve", "Normal valve", "Safety valve", "Safety valve", "Normal valve", "Safety valve")
Pump.Time                <-   NA       
Piping.Time              <-   NA
Lights.Time              <-   NA
Valve.Time               <-   NA
Total.Time               <-   NA


DF.Sample                <- data.frame(Machine, Pump.Option, Piping.Option, Lights.Option, Valve.Option, Pump.Time, Piping.Time, Lights.Time, Valve.Time, Total.Time)

需要生成的时间是Pump.Time、Piping.Time和Lights.Time,它们基于Pump.Option、Piping.Option和Lights.Option列的内容。这些时间将用于计算那台机器的总时间。

选择的时间是这样的。

  • Pump.Time
    • 30升(无额外时间)
    • 40升(平均10分钟,标准差4分钟)
    • 50升(平均20分钟,标准差10分钟)

  • Piping.Time
    • 无特殊管道(无额外时间)
    • 特殊管道(平均10分钟,标准差4分钟)

  • Lights.Option
    • 性病灯(无额外时间)
    • Std &附加(平均10分钟,标准差4分钟)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-15 08:55:16

为此,您可以使用dplyr的case_when,与一组嵌套的ifelse语句相比,它提供了相对干净的语法:

代码语言:javascript
复制
library(dplyr)

DF.Sample %>%
    mutate(Pump.Time = case_when(
            Pump.Option == "30 Liter" ~ 0,        
            Pump.Option == "40 Liter" ~ rnorm(n(), mean = 10, sd = 4),
            Pump.Option == "50 Liter" ~ rnorm(n(), mean = 20, sd = 10)
        ), 
        Piping.Time = case_when(
           Piping.Option == "No special piping" ~ 0, 
           Piping.Option == "special piping" ~ rnorm(n(), mean = 10, sd = 4)
        ),
        Lights.Time = case_when(
           Lights.Option == "Std light" ~ 0,
           Lights.Option == "Std & Additional" ~ rnorm(n(), mean = 10, sd = 4)
        )
    )
#>    Machine Pump.Option     Piping.Option    Lights.Option Valve.Option
#> 1        1    30 Liter No special piping        Std light Safety valve
#> 2        2    40 Liter No special piping Std & Additional Safety valve
#> 3        3    30 Liter    special piping Std & Additional Normal valve
#> 4        4    30 Liter No special piping Std & Additional Normal valve
#> 5        5    30 Liter    special piping Std & Additional Safety valve
#> 6        6    30 Liter No special piping Std & Additional Normal valve
#> 7        7    50 Liter No special piping        Std light Safety valve
#> 8        8    30 Liter    special piping Std & Additional Safety valve
#> 9        9    30 Liter    special piping Std & Additional Normal valve
#> 10      10    40 Liter No special piping Std & Additional Safety valve
#>    Pump.Time Piping.Time Lights.Time
#> 1   0.000000    0.000000    0.000000
#> 2   4.956528    0.000000   17.716970
#> 3   0.000000   11.051394   10.142101
#> 4   0.000000    0.000000   11.886158
#> 5   0.000000   15.291671    6.745524
#> 6   0.000000    0.000000    5.228694
#> 7  21.520437    0.000000    0.000000
#> 8   0.000000    9.777887    9.222347
#> 9   0.000000   11.219067   14.726647
#> 10 12.761031    0.000000    6.111458

数据

代码语言:javascript
复制
DF.Sample <- data.frame(
    Machine = c(1,2,3,4,5,6,7,8,9,10), 
    Pump.Option = c("30 Liter", "40 Liter", "30 Liter", "30 Liter", "30 Liter", "30 Liter", "50 Liter", "30 Liter", "30 Liter", "40 Liter"),
    Piping.Option = c("No special piping", "No special piping", "special piping", "No special piping", "special piping", "No special piping", "No special piping", "special piping", "special piping", "No special piping"),
    Lights.Option = c("Std light", "Std & Additional", "Std & Additional","Std & Additional", "Std & Additional", "Std & Additional", "Std light", "Std & Additional", "Std & Additional", "Std & Additional"),
    Valve.Option = c("Safety valve", "Safety valve", "Normal valve", "Normal valve", "Safety valve", "Normal valve", "Safety valve", "Safety valve", "Normal valve", "Safety valve")
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57035324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档