首页 > 解决方案 > 如何折叠/减少因子水平的数量

问题描述

我需要一些帮助来减少因子中的级别数量,我有一个包含 Sqft_basement 列的数据集,当我使用级别函数时,它返回该列中出现的每个数字,我将如何更改它以便级别是是或否取决于它是大于零还是等于零?

fbasement <- factor(House_Data$sqft_basement)
levels(fbasement)[levels(fbasement) > 0] <- "yes"
levels(fbasement)[levels(fbasement) <= 0] <- "no"
table(fbasement)



  fbasement
  no  yes 
  3677 2323 

导致这个。

我想知道是否有其他方法可以做到这一点,因为我使用的方法感觉非常粗糙。

标签: r

解决方案


将平方英尺数存储在一个因子中是一个坏主意,但如果这是您获取数据的方式,那么您将不得不处理它。但是,您可能误解了您的导师——也许他的意思是说结果是/否信息应该存储在一个因子中?那会更有意义。

无论如何,让我们生成一些数据来玩:

foo <- factor(sample(0:10, 100, rep=TRUE))

在其他任何事情之前,我会将数据改回原来的样子(数字):

foo <- as.numeric(as.character(foo))

现在,我可能只需要一个简单的布尔结果:

foo>0

如果由于某种原因您需要“是”和“否”,则可以转换为:

ifelse(foo>0, "yes", "no")

另一种可能更优雅的方法是使用 cut 函数:

cut(foo, breaks=c(-Inf,0,Inf), labels=c("no", "yes"))

推荐阅读