R语言 保留具有匹配行的列

0ve6wy6x  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(179)

在R中,我有一个包含4个变量的 Dataframe :

df <- data.frame(
  v1=c(1,2,3,4),
  v2=c("x","y","z","q"),
  v3=c("x","b","c","d"),
  v4=c("a","y","c","d"),
  v5=c("a","b","z","d"),
  v6=c("a","b","c","q")
)

假设我使用v2作为引用,我想知道还有哪些列与v2的值匹配。
如何将值从v3、v4等匹配到v2,以便知道匹配来自哪个列?结果如下所示:
| 变量1|变量2|相匹配|
| - -|- -|- -|
| 一个|X射线|第3版|
| 2个|Y形|第4版|
| 三个|Z形|第5版|
| 四个|q值|第6版|
我尝试了匹配、%in%和创建组合矩阵,但我无法找到解决方案。

pcww981p

pcww981p1#

您可以尝试:

library(tidyverse)

ref_col <- 'v2'

df %>%
  pivot_longer(-c('v1', ref_col)) %>%
  group_by(across(c('v1', ref_col))) %>%
  summarise(match = name[as.character(.data[[ref_col]]) == as.character(value)])

输出量:

# A tibble: 4 x 3
# Groups:   v1 [4]
     v1 v2    match
  <dbl> <fct> <chr>
1     1 x     v3   
2     2 y     v4   
3     3 z     v5   
4     4 q     v6
mklgxw1f

mklgxw1f2#

假设每行只有一个匹配项

> colnames(df[-2])[max.col(df$v2==df[,-2])]
[1] "v3" "v4" "v5" "v6"

相关问题