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

问题描述

我掌握的个人数据如下:

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

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

我想在两个不同观察值的任何一列中,选择Col1中满足criteriaA50)的每个人。也就是说,将选择个人A,因为他在两个不同的观察中拥有A50。但是,不会{strong>选择个人,因为他在一次观察中只有B,即使他两次在观察中成为A50

问题是对此的扩展:Subset multiple columns in R with multiple matches

解决方法

尝试与df$shorti = do.call(rbind,strsplit(as.character(df$COL1),"*.[0-9]_"))[,1] 1.0.0一起使用

dplyr

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确保匹配项在不同的列中。

,

这是基本的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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...