首页 > 解决方案 > 相关数据的 R 模拟

问题描述

data = data.frame(GROUP = sample(1:4, size = 1000, r = TRUE),
SCORE = runif(1000),

帮助 = runif(1000, -.2, .8))

我有样本“数据”,其中包含变量 GROUP,表示个人所在的 GROUP,SCORE 是该个人的 SCORE,而 HELP 是另一种衡量标准。

现在,如果您知道如果 GROUP = 1 的 HELP 值大于 0.3,则其平均得分较高,但如果其 HELP 值小于 0.4,则 GROUP = 2 的平均得分较低,您如何模拟使用这些信息的数据集?

标签: rdata.table

解决方案


这是一个简单的解决方案,用于针对相关条件dplyr增加/减少SCORE一个。sd

library(dplyr)

sd(data$SCORE)
#> [1] 0.2868018

data <- 
   data %>% 
   mutate(helpgt3 = as.integer(HELP > .3),
          helplt4 = as.integer(HELP < .4))

original_means <- 
   data %>% 
   group_by(GROUP, helpgt3) %>% 
   summarise(mean.score = mean(SCORE))

data <- 
   data %>% 
   mutate(SCORE = case_when(
      helpgt3 == 1 & GROUP == 1 ~ SCORE + 0.2868018,
      helplt4 == 1 & GROUP == 2 ~ SCORE - 0.2868018,
      TRUE ~ SCORE
   ))

new_means <- 
   data %>% 
   group_by(GROUP, helpgt3) %>% 
   summarise(mean.score = mean(SCORE))
#> `summarise()` regrouping output by 'GROUP' (override with `.groups` argument)

original_means
#> # A tibble: 8 x 3
#> # Groups:   GROUP [4]
#>   GROUP helpgt3 mean.score
#>   <int>   <int>      <dbl>
#> 1     1       0      0.486
#> 2     1       1      0.474
#> 3     2       0      0.473
#> 4     2       1      0.525
#> 5     3       0      0.482
#> 6     3       1      0.486
#> 7     4       0      0.545
#> 8     4       1      0.521
new_means
#> # A tibble: 8 x 3
#> # Groups:   GROUP [4]
#>   GROUP helpgt3 mean.score
#>   <int>   <int>      <dbl>
#> 1     1       0      0.486
#> 2     1       1      0.761
#> 3     2       0      0.186
#> 4     2       1      0.478
#> 5     3       0      0.482
#> 6     3       1      0.486
#> 7     4       0      0.545
#> 8     4       1      0.521

您的数据

set.seed(2020)
data = data.frame(GROUP = sample(1:4, size = 1000, r = TRUE),
                  SCORE = runif(1000),
                  HELP = runif(1000, -.2, .8))


推荐阅读