对多个列中的条件具有多个匹配项的子集面板数据

Subset panel data with more than one match for a criteria over multiple columns

我有这样的个人数据:

df=data.frame(Col1=c("A","A","B","B"),Col2=c("A50","C50","B60","A70"),Col3=c("A40","A50","A50","A70"))
criteria="A50"

  Col1 Col2 Col3
    A  A50  A40
    A  C50  A50
    B  A50  A50
    B  A70  A70

我想选择 Col1 中每个在两个不同观察中的任何列中满足 criteria (A50) 的个体。也就是说,个体 A 将被选中,因为他在两个不同的观察中有 A50。然而,个人 B 不会被选择 ,因为他在一次观察中只有 A50,即使他在那次观察中两次成为 A50

问题是这个问题的扩展:

尝试将此与 dplyr 1.0.0

一起使用
library(dplyr)

cols <- c('Col2', 'Col3') 

df %>%
  group_by(Col1) %>%
  filter(sum(colSums(cur_data()[cols] == criteria) >= 1) > 1)

#  Col1  Col2  Col3 
#  <chr> <chr> <chr>
#1 A     A50   A40  
#2 A     C50   A50  

cur_data()[cols] 仅选择 cols 列,colSums 计算每列中的匹配项数,sum 确保匹配项在不同的列中。

这是一个基本的 R 选项

u <- sapply(
  split(as.data.frame(df[-1] == criteria), df$Col1),
  function(x) all(rowSums(x) > 0) & all(colSums(x) > 0)
)
subset(df, Col1 == names(u)[u])

这给出了

  Col1 Col2 Col3
1    A  A50  A40
2    A  C50  A50