我有一个包含两个变量的唯一值的数据框:
df <- data.frame(V1=LETTERS,V2=c(1:26))
我想为df$V1
中的值和df$V2
的对应值过滤另一个数据帧。这是我尝试过的,显然无法产生预期的结果:
df2 <- data.frame(V1=c('A','A','B','B','A'),
V2=c(1,2,2,3,4))
df2 %>% filter(V1 %in% unique(df$V1) & V2 %in% unique(df$V2))
我期望后过滤的结果是:
V1 V2
1 A 1
2 B 2
我该如何实现?
答案 0 :(得分:2)
merge(df,df2)
V1 V2
1 A 1
2 B 2
library(tidyverse)
inner_join(df,df2)
V1 V2
1 A 1
2 B 2
答案 1 :(得分:2)
您也可以使用
df[df$V1 %in% unique(df2$V1),]
# V1 V2
# 1 A 1
# 2 B 2
或
library(tidyverse)
df %>% filter(V1 %in% unique(df2$V1))
# V1 V2
# 1 A 1
# 2 B 2
在上述两种情况下,您都将获得df
的行,其中V1
的{{1}}与df
的{{1}}的(唯一)值匹配。
答案 2 :(得分:1)
另一个选项是intersect
library(dplyr)
intersect(df, df2)
# V1 V2
#1 A 1
#2 B 2
或使用data.table
(假设它们都是data.table对象并具有相同的属性)
library(data.table)
fintersect(df, df2)
# V1 V2
#1: A 1
#2: B 2