R中的随机人口统计数据框架健全性检查

时间:2013-02-18 02:14:07

标签: r dataframe sanity-check

我正在尝试使用人口统计信息制作人员的示例数据框。我想确保生成的每一行数据都是合乎逻辑的。具体而言,没有一行表明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 个答案:

答案 0 :(得分:2)

如果要检查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')))
}