R语言:如何提取数据框中多列含指定矛盾类别的行?
解决思路与代码实现
你需要提取同一行中同时包含类别1和8的行,原代码用any_vars实现的是“或”逻辑(只要某列有1或8就保留),要改成“且”逻辑,确保两个值都出现在同一行的指定列中,以下是几种可行方案:
方案1:指定列直接枚举组合(适合列数少的情况)
如果只需要检查col_1和col_2两列,直接枚举两种矛盾组合即可:
Df %>% filter((col_1 == 1 & col_2 == 8) | (col_1 == 8 & col_2 == 1))
方案2:通用型方法(适合多列场景,比如你的15列)
如果需要检查多列(比如全部15列,或某几列范围),可以用rowSums结合across统计1和8的出现次数,只要两者都至少出现一次,就判定为矛盾行:
# 检查指定列(比如col_1到col_15) Df %>% filter( rowSums(across(vars(col_1:col_15), ~ . == 1)) >= 1 & rowSums(across(vars(col_1:col_15), ~ . == 8)) >= 1 ) # 如果要检查所有列,替换成everything() Df %>% filter( rowSums(across(everything(), ~ . == 1)) >= 1 & rowSums(across(everything(), ~ . == 8)) >= 1 )
逻辑说明
rowSums(across(...))会逐行统计符合条件的列数- 第一个条件确保行中至少有一个列是1,第二个条件确保至少有一个列是8,两者同时满足就说明同一行存在矛盾类别
内容的提问来源于stack exchange,提问作者Luisa
相关产品推荐
相关产品推荐

