1

人口統計情報を使用して、人々のサンプルデータフレームを作成しようとしています。生成されたデータの各行が論理的であることを確認したい。具体的には、博士号も取得している 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

4

1 に答える 1

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')))
}
于 2013-02-18T02:48:59.060 に答える