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