R 中的因子和虚拟变量

Factors and Dummy Variables in R

我是数据分析和学习R的新手。我有几个非常基本的问题我不是很清楚。我希望能在这里找到一些帮助。请耐心等待..仍在学习中-

我编写了一个小函数来对包含 9 个变量的数据集执行基本的探索性分析,其中 8 个是 Int/Numeric 类型,1 个是因子。函数是这样的:

  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)

但是输出文件的所有 class 变量都是 Character,所有 Means 都是 NA。在头疼之后,我认为问题出在 Factor 变量上。我使用这个将它转换为数字:

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

它运行良好。但是我很困惑,如果不查看数据集我就使用上面的函数——它不会工作。我该如何处理这种情况。

我什么时候应该考虑创建虚拟变量?

提前谢谢你,希望问题不要太傻!

请注意,c() 生成一个向量,并且向量中的所有元素必须相同 class。如果元素有不同的class,那么c()使用最不复杂的class,它能够容纳所有信息。例如。数字和整数将导致数字。字符和整数将导致字符。

如果需要不同的 class,请使用列表或 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)
)