独特之处和保存价值之间的区别

时间:2018-05-06 20:49:09

标签: save unique

解决方案是:

dfrm1[ dfrm1$Name %in% dfrm2$Name , ]

我之前亲自尝试过这个,但它似乎没有像我一直检查的那样工作

unique(dfrm1$name) 

它让我回想起我仍然拥有一千个不同的公司而不是预期的500个。但现在我用了

dfrm1[ dfrm1$Name %in% dfrm2$Name , ] 

没有否定,因为我想保留dfrm1 $ Name中包含dfrm2 $ Name的所有行。然后我做了以下。我通过执行

在新对象x中保存了我的代码唯一(dfrm1 $ Name)
x <- unique(dfrm1$Name)

当我这样做时

View(x) 

我得到了正确的500个唯一值,即使只是

unique(dfrm1$Name)

Factor w/ 1000 levels "...."的右上角显示RStudio

是否有人知道为什么只有View(x)显示正确的值?

1 个答案:

答案 0 :(得分:1)

您正在处理分类变量,也称为因子。

如果您使用data.frameas.data.frameread.table ...而未明确设置stringsAsFactors=FALSE,则会将字符列读入因子。这可以解释为什么你似乎不必处理这种数据类型。

来自factor向量的元素可以使用其levels属性给出的有限数量的值。当您将unique(dfrm1$name)与值一起打印时,会显示这些级别。

当您从factor向量中移除项目时,它会默认保留所有级别,包括那些不再描述向量的任何元素的级别。

另见?droplevels

要将factor转换为character,请使用as.character

见下面的例子:

x <- factor(c("a","b"),levels = c("a","b","c"))
x # same output for unique(x)
# [1] a b
# Levels: a b c

levels(x)
# [1] "a" "b" "c"

length(x)
# [1] 2

length(levels(x))
# [1] 3

as.character(x)
# [1] "a" "b"

levels(as.character(x))
# NULL