【问题标题】:How to check if a factor variable has only the levels I want?如何检查因子变量是否只有我想要的水平?
【发布时间】:2016-10-14 04:04:08
【问题描述】:

验证因子变量是否达到我想要的水平的最简单方法是什么?

# I want to make sure a factor variable has 'FP', 'TP' but nothing else

a <- factor(c('TP','TP','FP')) # Return TRUE
b <- factor(c('TP')) # Return TRUE
c <- factor(c('TP', '1234')) # Return FALSE

【问题讨论】:

  • @Ronak Shah TRUE 或 FALSE 就足够了
  • 根据您的操作,您可能不希望第二个示例返回 TRUE。

标签: r factors levels


【解决方案1】:

我们可以使用all%in%

all(levels(a) %in% c("FP", "TP"))
#[1] TRUE
all(levels(b) %in% c("FP", "TP"))
#[1] TRUE
all(levels(c) %in% c("FP", "TP"))
#[1] FALSE

只是为了避免代码的重复,或者如果我们需要检查更多的级别

checkFactor <- c("FP", "TP")
all(levels(a) %in% checkFactor)
#[1] TRUE
all(levels(b) %in% checkFactor)
#[1] TRUE
all(levels(c) %in% checkFactor)
#[1] FALSE

【讨论】:

    【解决方案2】:

    还有另一种方法:

    check.factor.levels <- function(expected, actual) {
      length(setdiff(actual, expected)) == 0  
    }
    
    expected <- c('FP', 'TP')
    check.factor.levels(expected, levels(a))
    #[1] TRUE
    check.factor.levels(expected, levels(b))
    #[1] TRUE
    check.factor.levels(expected, levels(c))
    #[1] FALSE
    

    【讨论】:

    • 是的,但我认为 OP 只需要单向检查(实际级别在预期级别,但预期级别可能包含其他级别,例如,考虑测试用例 b)。跨度>
    猜你喜欢
    • 2018-11-03
    • 2013-10-08
    • 2017-05-23
    • 2022-10-07
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 2014-04-14
    • 2015-10-04
    相关资源
    最近更新 更多