【发布时间】:2015-10-07 01:53:22
【问题描述】:
在数据挖掘中进行预处理有时涉及对分类变量进行重新分组和重新编码。众所周知,一旦您在 R 中重新编码分类变量(即函数 mapvalues),您需要使用 df$variable <- factor(df$variable) 更新您的分类变量,以便您可以使用 str(df) 查看 data.frame 中的真实级别数。
我写了一段代码来自动更新数据集的分类变量:
cat <- sapply(df, is.factor) #Select categorical variables
names(df[ ,cat]) #View which are they
A <- function(x) factor(x) #Create function for "apply"
df[ ,cat] <- data.frame(apply(df[ ,cat],2, A)) #Run apply function
str(df) #Check
我的问题是:更新数据集后,如何选择级别数等于 1 的列?我没有运气尝试过这些行:
cat <- sapply(df, is.factor) #Select categorical variables
categorical <- df[,cat] #Create a df named "categorical" separating them
A <- function(x) nlevels(x)==1 #Create "A" function for apply
x <- data.frame(apply(categorical,2, A)) #Run apply function
utils::View(x) #Check and see it is not working...
感谢您的帮助和时间
【问题讨论】:
-
可能是
indx <- sapply(df[,cat], nlevels)==1; df[,cat][,indx] -
不错!我想到了
length(levels()) -
@akrun 您的线路运行良好。非常感谢您的回复。它返回一个带有 TRUE/FALSE 的逻辑,这取决于它是否是 1 级分类变量。我会将其标记为正确答案。
-
我将其发布为解决方案。感谢您的反馈。
标签: r apply sapply data-cleaning