0

私はデータ分析と R の学習が初めてです。非常に基本的な質問がほとんどなく、よくわかりません。ここで何か助けが見つかることを願っています。ご容赦ください..まだ学んでいます -

私は、8 つの変数が Int/Numeric 型で、1 つの変数が因子である 9 つの変数を持つデータ セットに対して基本的な探索的分析を実行するための小さな関数を作成しました。関数は次のようになります。

  out <- function(x) 
  {
    c <- class(x)
    na.len <- length(which(is.na(x)))
    m <- mean(x, na.rm = TRUE)
    s <- sd(x, na.rm = TRUE)
    uc <- m+3*s
    lc <- m-3*s
    return(c(classofvar = c, noofNA = na.len, mean=m, stdev=s, UpperCap = uc, LowerCap = lc))
  }

そして、次を使用してデータセットに適用します。

stats <- apply(train, 2, FUN = out)

ただし、出力ファイルには、変数のすべてのクラスが文字として、すべての平均が NA として含まれています。頭が痛くなった後、問題は Factor 変数によるものであることがわかりました。これを使用して数値に変換しました:

train$MonthlyIncome=as.numeric(as.character(train$MonthlyIncome))

うまくいきました。しかし、データセットを見ずに上記の関数を使用すると、うまくいかないことに混乱しています。どうすればこの状況を処理できますか。

いつダミー変数の作成を検討する必要がありますか?

よろしくお願いします。質問がばかげていないことを願っています。

4

1 に答える 1

0

c()結果はベクトルになり、ベクトル内のすべての要素は同じクラスでなければならないことに注意してください。要素に異なるクラスがある場合は、c()すべての情報を保持できる最も複雑でないクラスを使用します。たとえば、数値と整数の結果は数値になります。character と integer は character になります。

別のクラスが必要な場合は、リストまたは data.frame を使用します。

out <- function(x) 
  {
    c <- class(x)
    na.len <- length(which(is.na(x)))
    m <- mean(x, na.rm = TRUE)
    s <- sd(x, na.rm = TRUE)
    uc <- m+3*s
    lc <- m-3*s
    return(data.frame(classofvar = c, noofNA = na.len, mean=m, stdev=s, UpperCap = uc, LowerCap = lc))
  }

sum(is.na(x))よりも速いlength(which(is.na(x)))

lapply各変数で関数を実行するために使用します。do.call結果のデータフレームを追加するために使用します。

stats <- do.call(
  rbind,
  lapply(train, out)
)
于 2015-09-22T08:41:00.603 に答える