问题描述
我掌握的个人数据如下:
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
中满足criteria
(A50
)的每个人。也就是说,将选择个人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