Нарисуйте идентификаторы из фрейма данных на основе условий и вероятностей для условий - PullRequest
0 голосов
/ 20 мая 2018

У меня есть следующий фрейм данных

ID <- c(1,2,3,4,5,6)
pop <- c(10,10,10,10,1000,1000)
df <- data.frame(pop,ID)

Теперь я хотел бы нарисовать уникальные идентификаторы из этого фрейма данных с условием, что вероятность того, что я нарисую ID с населением, большим или равным1000 равняется 0,1, а вероятность того, что ID с населением ниже 1000 составляет 0,9.

Это код, который я придумала:

sample(c(df$ID[df$pop>=1000],df$ID[df$pop<1000]),3, prob=c(0.1,0.9))

Однако я получаю следующее сообщение об ошибке:

Error in sample.int(length(x), size, replace, prob) : 
  incorrect number of probabilities

Как мне переписать этопроблема, так что это работает без присвоения вероятности для каждого идентификатора?

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

Может быть, это ваше решение:

# 1. Data set
df <- data.frame(
  id = c(1, 2, 3, 4, 5, 6),
  population = c(10, 10, 10, 10, 1000, 1000))

# 2. Set 'probability' by 'population'
df <- df %>% 
  mutate(probability = ifelse((population >= 1000), 0.1, 0.9))
0 голосов
/ 20 мая 2018

Простой способ - создать вектор вероятности для каждого идентификатора и передать его в функцию sample.Для идентификаторов с pop >=1000 вектор вероятности должен иметь 0.1, а для идентификаторов с pop <1000 вектор должен содержать 0.9.

# Create a probability vector for each ID and pass it to sample function. 
sample(df$ID, 3, prob = ifelse(df$pop>=1000, 0.1, 0.9))
#[1] 4 3 2
sample(df$ID, 3, prob = ifelse(df$pop>=1000, 0.1, 0.9))
#[1] 2 1 4
sample(df$ID, 3, prob = ifelse(df$pop>=1000, 0.1, 0.9))
#[1] 3 2 4

Данные:

ID <- c(1,2,3,4,5,6)
pop <- c(10,10,10,10,1000,1000)
df <- data.frame(pop,ID)
...