我有两个名称数据框,其中数据框一包含单列名称,而数据框二包含多列名称。如何过滤第二个数据帧以仅包含与第一个数据帧中匹配的行?
前/
df1
名字 |
---|
约翰 |
琼 |
df2
A 栏 | B 栏 | C 栏 | D 栏 |
---|---|---|---|
格里 | 吉姆 | 布莱恩 | 琼 |
约翰 | 约翰 | 约翰 | 约翰 |
罗恩 | 格雷格 | 山姆 | 梅西 |
所需输出
名字 | A 栏 | B 栏 | C 栏 | D 栏 |
---|---|---|---|---|
琼 | 格里 | 吉姆 | 布莱恩 | 琼 |
约翰 | 约翰 | 约翰 | 约翰 | 约翰 |
我尝试使用 dplyr 的 left_join 但输出不是我需要的
一种方法是查找
df2
中与 df1
的名称匹配的行,并使用唯一索引来索引 df2
。
df2[unique(unlist(lapply(1:ncol(df2), \(x) which(df2[,x] %in% df1$name)))),]
A B C D
2 John John John John
1 Gerry Jim Brian Joan
数据:
df1 <- structure(list(name = c("John", "Joan")), class = "data.frame", row.names = c(NA,
-2L))
df2 <- structure(list(A = c("Gerry", "John", "Ron"), B = c("Jim", "John",
"Greg"), C = c("Brian", "John", "Sam"), D = c("Joan", "John",
"Maisy")), class = "data.frame", row.names = c(NA, -3L))