问题
我有两个数据帧:cube
和hub
,变量分别为knb_nd
和nd
| cube$knb_nd |
|---------------------|
| 01 |
| 02 |
| 05 |
| 05 |
| NA |
| 07 |
| hub$nd |
|---------------------|
| 01 |
| 02 |
| 02 |
| 01 |
| NA |
我想在hub
中不存在的knb_nd
的基础上拥有cube
的子集
| restult$nd |
|---------------------|
| 05 |
| 07 |
我尝试了什么
我试图在数据帧上使用unique()
函数使用基本R进行筛选,但当我搜索ND时,它仍然显示在两个数据帧中。dplyr
版本存在相同问题。
# base R version
cube[!c(unique(cube$knb_nd) %in% unique(hub$nd)),]
# dplyr version
cube %>%
filter(!c(knb_nd %in% unique(hub$nd)))
我知道可能有一种简单而明显的方法可以找到它,但我似乎没有想过。
尝试:
library(dplyr)
result <- unique(anti_join(cube, hub, by = c("knb_nd" = "nd"))) %>%
rename(nd = knb_nd)
nd
1 5
3 7
base R
中存在问题
cube[!c(unique(cube$knb_nd) %in% unique(hub$nd)),]
unique(cube$knb_nb)
可以返回比列的原始length
更短的length
,因此导出的逻辑向量也将具有更短的长度,从而创建不正确的子集。取而代之的是
cube[!cube$knb_nd %in% unique(hub$nd),]