0

我是数据分析和学习 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。经过一番头疼之后,我认为问题出在 Factor 变量上。我使用以下方法将其转换为数字:

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

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

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

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

4

1 回答 1

0

请注意,向量中c()的结果和向量中的所有元素必须属于同一类。如果元素具有不同的类,则c()使用能够保存所有信息的最简单的类。例如,数字和整数将产生数字。字符和整数将产生字符。

如果您需要不同的类,请使用列表或 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 回答