【问题标题】:Factors and Dummy Variables in RR中的因子和虚拟变量
【发布时间】:2015-09-22 07:37:56
【问题描述】:

我是数据分析和学习 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))

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

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

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

【问题讨论】:

  • 试试stats &lt;- sapply(train, FUN = out)apply 将您的 data.frame 转换为矩阵,该矩阵只能保存一种数据类型。
  • 你的第二个问题比较难回答。您需要虚拟变量进行建模,但大多数模型函数可以自动为您进行虚拟编码。
  • sapply 有效,但因子变量给出了 NA,我想我需要先将其转换为数字。谢谢。
  • 因子的标准差是多少?将一个因子强制为数字并从中计算 sd 有什么意义?
  • 哎呀..我的错!实际上,我的数据集中的 MonthlyIncome 是一个因子变量——它不应该是。这就是为什么我说我需要先将其转换为数字类型。谢谢@Roland

标签: r dummy-variable


【解决方案1】:

请注意,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)
)

【讨论】:

  • 我在代码中使用了sum(is.na(x)),并按照建议添加了data.frame,但现在无法使用applysapply 中的函数。我收到以下错误 as.data.frame.default(x[[i]], optional = TRUE) 中的错误:无法将类“函数”强制转换为 data.frame 不是确定如何解决这个问题。
猜你喜欢
  • 2018-03-29
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-05
  • 1970-01-01
  • 2019-06-25
相关资源
最近更新 更多