首页 > 解决方案 > unique 和 save unique 的区别

问题描述

解决方案是:

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

实际上我以前自己尝试过这个,但它似乎没有用,因为我总是检查

unique(dfrm1$name) 

它让我知道我仍然有 1000 家不同的公司,而不是预期的 500 家。但现在我使用了

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

没有否定,因为我想保留 dfrm1$Name 中包含 dfrm2$Name 的所有行。然后我做了以下。我通过执行将我的代码 unique(dfrm1$Name) 保存在新对象 x 中

x <- unique(dfrm1$Name)

当我做

View(x) 

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

unique(dfrm1$Name)

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

有谁知道答案为什么只View(x)显示正确的值?

标签: saveunique

解决方案


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

data.frame如果您使用, as.data.frame, read.table... 而不明确设置,则字符列将被读入因子stringsAsFactors=FALSE。这也许可以解释为什么您必须处理这种数据类型,而您似乎不想这样做。

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

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

也可以看看?droplevels

要转换factorcharacter,请使用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

推荐阅读