我将csv文件读入名为rr
的数据框中。字符列被视为很好的因素。
我是否正确理解levels
只是列的unique
值?即。
levels(rr$col) == unique(rr$col)
然后我想删除前导和尾随空格。(我不知道strip.WHITESPACE选项在阅读中) 所以我做了
rr$col = str_trim(rr$col).
现在rr$col
不再是一个因素。所以我做了
rr$col = as.factor(rr$col)
但我现在看到levels(rr$col)
缺少一些独特的价值观!为什么呢?
答案 0 :(得分:3)
“Level”是变量(列)的特殊属性。它们很方便,因为即使子集不包含特定级别的任何值,它们也会保留。举个例子
x <- as.factor(rep(letters[1:3], each = 3))
如果我们仅对a
和b
级别下的元素进行子集,则省略c
。它将使用levels()
检测,但不会检测unique()
。后者将看到哪些值仅出现在子集中。
> x[c(1,2, 4)]
[1] a a b
Levels: a b c
> levels(x[c(1,2, 4)])
[1] "a" "b" "c"
> unique(x[c(1,2, 4)])
[1] a b
Levels: a b c