R中的因子和虚拟变量

时间:2015-09-22 07:37:57

标签: r dummy-variable

我是数据分析和学习R的新手。我几乎没有非常基本的问题,我不太清楚。我希望在这里找到一些帮助。请耐心等待..继续学习 -

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

  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)

但输出文件的所有类变量都是Character,所有的Means都是NA。在一些头疼之后,我认为问题是由于因子变量引起的。我使用它将其转换为数字:

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

工作得很好。但我很困惑,如果不看数据集我使用上面的功能 - 它不会工作。我该如何处理这种情况。

我应该何时考虑创建虚拟变量?

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

1 个答案:

答案 0 :(得分:0)

请注意^(?!\d+$)[a-zA-Z0-9 _?!()\/\\]{1,30}$ 会生成一个向量,向量中的所有元素必须属于同一个类。如果元素具有不同的类,则c()使用能够保存所有信息的最不复杂的类。例如。数字和整数将导致数字。字符和整数将导致字符。

如果您需要不同的类,请使用列表或data.frame。

c()

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