解决方案是:
dfrm1[ dfrm1$Name %in% dfrm2$Name , ]
我之前实际上自己尝试过这个,但它似乎不像我一直检查的那样有效
unique(dfrm1$name)
它让我回想起我仍然有一千家不同的公司,而不是预期的500家。但现在我用了
dfrm1[ dfrm1$Name %in% dfrm2$Name , ]
没有否定,因为我想保留 dfrm1$Name 中包含 dfrm2$Name 的所有行。然后我做了以下工作。我通过
x <- unique(dfrm1$Name)
当我这样做时
View(x)
我得到了正确的 500 个唯一值,即使只是
unique(dfrm1$Name)
在RStudio
的右上角向我显示Factor w/ 1000 levels "...."
。
有谁知道为什么只有View(x)
显示正确值的答案?
您正在处理一个分类变量,也称为因子。
如果使用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