выборка с dplyr и в ряд - PullRequest
       80

выборка с dplyr и в ряд

1 голос
/ 30 марта 2020

Вот мой пример:

library(dplyr)

n_experiments <- 1000
a <- sample(1:3, n_experiments, replace = T)
b <- sample(1:3, n_experiments, replace = T)


my_df <- data.frame(a = a, b= b)
set.seed(7);my_df <- my_df %>% rowwise() %>% 
  mutate(col_1 = sample(setdiff(c(1,2,3), unique(c(a,b ))),1),
         col_2 = sample(setdiff(c(1,2,3), unique(c(a,b ))),1),
         set =I(list(unique(c(a,b )))),
         set_diff = I(list(setdiff(c(1,2,3), unique(c(a,b ))))),
  )

К сожалению, я не знаю, как заставить всех воспроизвести один и тот же пример, но вот что я получаю на своем компьютере в качестве вывода

df

В самой первой строке показано, что col_1 и col_2 различны, хотя я ожидаю, что они будут одинаковыми. Более того, я ожидаю, что col_1 и col_2 будут выбраны из столбца set_diff. Может ли кто-нибудь помочь мне объяснить мою ошибку?

1 Ответ

1 голос
/ 30 марта 2020

В самой первой строке показано, что col_1 и col_2 различны, хотя я ожидаю, что они будут одинаковыми.

set.seed(7) гарантирует, что каждый раз, когда вы запускаете свой скрипт, он создаст тот же my_df. Это не означает, что каждый раз, когда вы запускаете sample, он выбирает одно и то же число, поэтому col_1 и col_2 не обязательно должны быть одинаковыми. Однако, если вы запустите свой код дважды, оба получат одинаковый col_1.

Я ожидаю, что col_1 и col_2 будут выбраны из столбца set_diff.

Из документация sample: Если x имеет длину 1, является цифрой c (в смысле is.numeri c) и x> = 1, выборка по выборке происходит от 1: x. Следовательно, если set_diff равно 3, выборка берется из c(1,2,3).

...