对多个列中的条件具有多个匹配项的子集面板数据
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
我有这样的个人数据:
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