Я пытаюсь смоделировать некоторые данные путем выборки из нескольких шагов.
Первый шаг (создать х) работает нормально.
На втором шаге я хочу создать переменную y путем выборки из разных векторов на основе значения x.
Мой код выполняется без ошибок, но терпит неудачу при том, чего я пытаюсь достичь, так как он выбирает только одно значение, например, x == «A», а затем повторно использует это значение для всех последующих строк, где x == «A» , Я хочу, чтобы он пробовал один раз для каждой строки, где x == "A"
Код:
library(tidyverse)
set.seed(1)
data <- tibble(
x = sample(c("A", "B", "C"), size = 10000, prob = c(0.1, 0.2, 0.7), replace = TRUE),
y = case_when(
x == "A" ~ sample(c("A1", "A2", "A3"), size = 1, prob = c(0.3, 0.4, 0.3)),
x == "B" ~ sample(c("B1", "B2", "B3"), size = 1, prob = c(0.3, 0.4, 0.3)),
x == "C" ~ sample(c("C1", "C2", "C3"), size = 1, prob = c(0.3, 0.4, 0.3)),
))
unique(data$x)
[1] "C" "A" "B"
unique(data$y)
[1] "C1" "A2" "B3"
Если код работает как задумано, unique(data$y)
должен вернуть что-то похожее на [1] "A1", "A2", "A3", "B1", "B2", "B3", "C1", "C2", "C3"
Я знаю, что проблема в аргументе size = 1
в sample (), но чем я могу его заменить? Удаление его возвращает ошибку:
Error: `x == "A" ~ sample(c("A1", "A2", "A3"), prob = c(0.3, 0.4, 0.3))` must be length 100 or one, not 3
И я пробовал size = nrow(.data)
и size=nrow(.)
, но это также возвращает ошибку.
Есть ли простое решение для этого?