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

问题描述 投票:0回答:3

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

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

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

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

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

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

r r-factor
3个回答
1
投票

首先,使用您的因子级别创建一个新对象(使用来自DatamineR的答案的数据,但不使用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)
© www.soinside.com 2019 - 2024. All rights reserved.