【问题标题】:Remove variables with factor level 1删除因子水平为 1 的变量
【发布时间】:2013-08-01 13:18:20
【问题描述】:

我正在为我的数据框EMGbin 使用bnlearn 包中的程序gs。数据框EMGbin 包含从 A 到 Z 的所有因子。EMGbin 有 600000 列和 130 行。这是EMGbin的示例:

   V101  V102  V103  V104  V105  V106
 1    L     M     D     S     O     O
 2    L     M     C     P     A     O
 3    J     M     C     O     O     O
 4    L     N     D     R     A     O
 5    K     M     D     O     A     O
 6    K     M     C     P     O     O
 7    K     N     D     Q     O     O
 8    L     N     D     R     O     O
 9    L     M     D     O     O     O
10    K     M     D     S     A     O

当我运行程序 gs(EMGbin) 时,我得到了错误:

Error in check.data(x) : all factors must have at least two levels.

当我运行sapply(EMGbin, nlevels) 时,我看到了 600,000 个变量中每个变量的级别,并且我看到其中一些被列为 1 级别。删除具有 1 个因子水平的变量会有所帮助吗?到目前为止,我知道如何做到这一点的唯一方法是 x[, sapply(x, fun) != 1],但我不知道用什么替代 fun

【问题讨论】:

    标签: r


    【解决方案1】:

    使用这个:

    x[, sapply(x, nlevels) > 1]
    

    【讨论】:

    • 如果您也有不是因子的变量,并且想要保留它们:x[, (sapply(x, nlevels>1)) | (sapply(x, is.factor)==FALSE)]
    【解决方案2】:

    您可以使用nlevels 函数检查因子中的级别数。

    【讨论】:

    • 当我使用 nlevels("A") 时,我会返回 0。如果我使用 nlevels("O") 和所有其他字母也是如此
    • nlevels 接受 factor 参数。试试nlevels(EMGbin$V105)
    • nlevels(EMGbin$V105) 返回 3。这是否意味着对于 nlevels(EMGbin$COLNAME) 返回 1 的值,我需要删除该列才能使其正常工作?
    • 您已经得到了大部分答案。你想要x[, sapply(x, fun) != 1],你需要用nlevels替换fun
    猜你喜欢
    • 1970-01-01
    • 2015-01-05
    • 2013-10-08
    • 2017-05-23
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多