
[英]Use all possible levels of a factor to generate zero length() in an output
[英]How to output all levels, which length is not equal to 3?
我想显示所有级别,该长度(如character
)不等于3个符号。
以下代码为每一行返回dt$col
长度:
with(dt, nchar(as.character(dt$col)))
但是,如果我将levels(dt$col)
作为第一个参数传递,它将失败并显示以下错误:
eval(替代(expr),数据,enclos = parent.frame())中的错误:
类型为'character'的'envir'参数无效
如何计算每个级别的长度? 如何只显示长度错误的等级?
如果with
使用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的答案中的数据,但不将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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.