我是数据分析和学习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))
工作得很好。但我很困惑,如果不看数据集我使用上面的功能 - 它不会工作。我该如何处理这种情况。
我应该何时考虑创建虚拟变量?
提前谢谢你,我希望问题不要太傻!
答案 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