如果数据框中的列包含零长度字符串,则将其传递给levels()函数将返回零长度字符串。但是,unique()不会。这对我来说似乎是违反直觉的,而且我找不到任何解释这一点的文档。有谁知道为什么会这样?
示例:
d <- data.frame( col1 = c("", 'a', 'b')) # Contains "".
调用unique():
unique(d$col1)
unique()不返回零长度字符串元素:
[1] a b
Levels: a b
levels()在结果中包含“”:
levels(d$col1)
[1] "" "a" "b"
答案 0 :(得分:0)
这与打印方法有关。从文档中,unique
的返回值:
对于矢量,x的相同类型的对象,但每个重复元素只有一个副本。没有复制任何属性(因此结果没有名称)。
事实上,您可以看到unique
返回一个因素,因为col1
也是一个因素:
class(unique(d$col1))
[1] "factor"
然而,levels
的返回值是一个字符向量:
class(levels(d$col1))
[1] "character"
因此,unique
会打印空字符串但没有双引号。另一种方法是定义不带因子列的df:
d <- data.frame(col1 = c("", 'a', 'b'), stringsAsFactors = F)
这里unique
确实会返回想要的“”。当然levels
仅适用于因素而且不再适用:
unique(d$col1)
[1] "" "a" "b"