Проверка достоверности рандомизированных демографических данных в R

Я пытаюсь создать образец данных о людях с их демографической информацией. Я хочу убедиться, что каждая строка сгенерированных данных является логичной. В частности, это не строка, указывающая на человека в возрасте до 22 лет, который также имеет докторскую степень. Как сделать так, чтобы фрейм данных сделал логическую проверку? Ниже приведен код, который я сейчас использую. Переменная "a" - это количество строк для вывода, "b" - средний возраст, а "d" - вероятность NA.

AgeFn <- function(a,b){
  MedianYr <- b
  Year <- 1900 + as.POSIXlt(Sys.Date())$year
  RNormYr <- as.integer((rnorm(a)*10+MedianYr))
  Age1 <- Year - RNormYr
}

EducationFn <- function(a, d){
  EducationLs <- c("Some High School", "High School Grad", "Associates", "Bachelors",     
  "Masters", "Profession", "Doctorate", NA)
  Education1 <- sample(EducationLs, a, replace=TRUE, prob=c(0.085, 0.25, 0.075, 0.176, 0.072,   
  0.019, 0.012, d))
  return(Education1)
}

UserGen <- function(a,b,d){
  ID <- c(1:a)
  Age <- AgeFn(a,b,c)
  Education <- EducationFn(a,d) 
  data.frame(ID, Age, Gender, Education)
}

Система: Mac OS 10.8.2, RStudio: v0.97.312

1 ответ

Решение

Если вы хотите проверить свой data.frame на наличие нежелательных комбинаций, вы можете использовать такие команды, как:

subset(df, Age <= 22 & Education == 'Doctorate')

или же

df[df$Age <= 22 & df$Education == 'Doctorate',]

оба возвращают любые строки во фрейме данных, которые соответствуют вашим критериям.

Если ваше намерение состоит в том, чтобы сделать выборку из распределения вероятностей, обусловленного другой установленной переменной, вы можете попробовать ifelse, Подробный пример:

EduByAge <- function (Age) {
  ifelse(Age < 12 , sample(c('Elementary', 'Middle'), size=1),
    ifelse(Age < 22, sample(c('Elementary', 'Middle', 'High', 'College'), size=1),
           ifelse(Age < 35, sample(c('Elementary','Middle','High','College','Masters','Doctorate'),size=1), 'None')))
}
Другие вопросы по тегам