如何输出所有级别,其中长度不等于3?
How to output all levels, which length is not equal to 3?
我想显示所有级别,其长度(如character
)不等于3个符号。
下面的代码returns每行的长度dt$col
:
with(dt, nchar(as.character(dt$col)))
但是如果我将 levels(dt$col)
作为第一个参数传递,它会失败并出现以下错误:
Error in eval(substitute(expr), data, enclos = parent.frame()) :
invalid 'envir' argument of type 'character'
如何计算每个级别的长度?如何只显示长度错误的关卡?
如果您正在使用 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
首先,使用您的因子水平创建一个新对象(使用 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"
一行完成的一些方法:
(l <- levels(f$myFactor))[nchar(l)!=3]
(function(x) x[nchar(x)!=3])(levels(f$myFactor))
levels(f$myFactor) %>% {.[nchar(.)!=3]} # uses library(magrittr)
我想显示所有级别,其长度(如character
)不等于3个符号。
下面的代码returns每行的长度dt$col
:
with(dt, nchar(as.character(dt$col)))
但是如果我将 levels(dt$col)
作为第一个参数传递,它会失败并出现以下错误:
Error in eval(substitute(expr), data, enclos = parent.frame()) :
invalid 'envir' argument of type 'character'
如何计算每个级别的长度?如何只显示长度错误的关卡?
如果您正在使用 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
首先,使用您的因子水平创建一个新对象(使用 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"
一行完成的一些方法:
(l <- levels(f$myFactor))[nchar(l)!=3]
(function(x) x[nchar(x)!=3])(levels(f$myFactor))
levels(f$myFactor) %>% {.[nchar(.)!=3]} # uses library(magrittr)