理解水平:水平与唯一()不同

时间:2015-02-21 11:46:15

标签: r

我将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)缺少一些独特的价值观!为什么呢?

1 个答案:

答案 0 :(得分:3)

“Level”是变量(列)的特殊属性。它们很方便,因为即使子集不包含特定级别的任何值,它们也会保留。举个例子

x <- as.factor(rep(letters[1:3], each = 3))

如果我们仅对ab级别下的元素进行子集,则省略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