解决方案是:
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)
显示正确的值?
答案 0 :(得分:1)
您正在处理分类变量,也称为因子。
如果您使用data.frame
,as.data.frame
,read.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