如何根据另一个数据帧中的列中的名称过滤具有多列的数据帧中 r 中的行?

问题描述 投票:0回答:1

我有两个名称数据框,其中数据框一包含单列名称,而数据框二包含多列名称。如何过滤第二个数据帧以仅包含与第一个数据帧中匹配的行?

前/

df1

名字
约翰

df2

A 栏 B 栏 C 栏 D 栏
格里 吉姆 布莱恩
约翰 约翰 约翰 约翰
罗恩 格雷格 山姆 梅西

所需输出

名字 A 栏 B 栏 C 栏 D 栏
格里 吉姆 布莱恩
约翰 约翰 约翰 约翰 约翰

我尝试使用 dplyr 的 left_join 但输出不是我需要的

r data-manipulation
1个回答
0
投票

一种方法是查找

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))
© www.soinside.com 2019 - 2024. All rights reserved.