理解级别:级别与 unique() 不同吗

mhk*_*mhk 2 r

我将 csv 文件读入名为rr. 角色栏被视为因素,这很好。

我是否正确理解这些levels只是unique列的值?IE

levels(rr$col) == unique(rr$col)
Run Code Online (Sandbox Code Playgroud)

然后我想去掉前导和尾随空格。(我不知道 read 中的 strip.WHITESPACE 选项)所以我做了

rr$col = str_trim(rr$col).
Run Code Online (Sandbox Code Playgroud)

现在rr$col不再是一个因素了。所以我做了

rr$col = as.factor(rr$col)
Run Code Online (Sandbox Code Playgroud)

但我现在发现它levels(rr$col)缺少一些独特的价值观!为什么?

Rom*_*rik 5

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

x <- as.factor(rep(letters[1:3], each = 3))
Run Code Online (Sandbox Code Playgroud)

如果我们仅对 level 下的元素进行子集化,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
Run Code Online (Sandbox Code Playgroud)

  • @buhz重申一下,如果你有一个因子向量`c("a", "a", "b", "c")`并删除两个`"a"`,你将得到`c("b", “c”)`。这对应于你使用“unique()”得到的结果,但“levels()”仍然是“abc”,因为 R 记得在删除它之前它有“a”。要丢失“a”,您必须运行“droplevels”。 (2认同)