首页 文章

如何输出所有级别,长度不等于3?

提问于
浏览
0

我想显示所有级别,其长度(如 character )不等于3个符号 .

以下代码返回每行 dt$col 的长度:

with(dt, nchar(as.character(dt$col)))

但是如果我将 levels(dt$col) 作为第一个参数传递,则会因以下错误而失败:

eval中的错误(substitute(expr),data,enclos = parent.frame()):'character'类型的'envir'参数无效

如何计算每个级别的长度?如何仅显示错误长度的级别?

3 回答

  • 1

    首先,使用您的因子级别创建一个新对象(使用来自DatamineR的答案的数据,除了 NOT ,使用 factor 作为列名称):

    f <- data.frame(myFactor = factor(c("ABCD", "ABC", "A", "ABCDE", "ABC")))
    myLevs <- levels(f$myFactor)
    

    然后对不是三个字符长的级别进行子集化:

    myLevs[nchar(myLevs) != 3]
    ## [1] "A"     "ABCD"  "ABCDE"
    
  • 1

    如果您使用的是 with ,则不应使用 dt$ ,您可以直接引用列名称 .

    # Some factor data
    f <- data.frame(factor = factor(c("ABCD", "ABC", "A", "ABCDE", "ABC")))
    
    # Cont the lengths of the factors
    with(f, nchar(as.character(factor)))
    [1] 4 3 1 5 3
    
    # Display the levels whose length is not equal to 3
    f$factor[with(f, which(nchar(as.character(factor)) !=3)), drop = TRUE]
    [1] ABCD  A     ABCDE
    Levels: A ABCD ABCDE
    
  • 0

    一些方法可以在一行中完成:

    (l <- levels(f$myFactor))[nchar(l)!=3]
    (function(x) x[nchar(x)!=3])(levels(f$myFactor))
    levels(f$myFactor) %>% {.[nchar(.)!=3]}  # uses library(magrittr)
    

相关问题