如果值与在 r 中有条件删除的值匹配,则删除行

Posted

技术标签:

【中文标题】如果值与在 r 中有条件删除的值匹配,则删除行【英文标题】:remove rows if value matches that which was conditionally remove in r 【发布时间】:2019-11-25 10:05:54 【问题描述】:

我有一个数据框。我正在尝试删除列中的值与有条件删除的其他行匹配的行。让我提供一个简单的例子来更好地解释。

我尝试使用上一篇文章作为起点: Remove Rows From Data Frame where a Row match a String

>dat
A,B,C
4,3,Foo 
2,3,Bar
1,2,Bar
7,5,Zap

首先删除C列中带有“Foo”的行:

dat[!grepl("Foo", dat$C),]

现在我想删除 B 列中的值与 Foo 行中的值匹配的任何其他行。所以在这个例子中,任何 B = 3 的行都将被删除,因为第 1 行有 Foo,它被删除并且 B=3。

>dat.new
1,2,Bar
7,5,Zap

任何关于如何做到这一点的想法将不胜感激。

【问题讨论】:

【参考方案1】:

我们将“C”为“Foo”的“B”值子集,通过检查“B”中的这些值创建逻辑向量,取反(!)并创建“C”为不是“Foo”

library(dplyr)
dat.new <- dat %>%
              filter(!B %in% B[C == 'Foo'], C != 'Foo')
dat.new
#  A B   C
#1 1 2 Bar
#2 7 5 Zap

或者在base Rsubset

subset(dat, !B %in% B[C == 'Foo'] & C != "Foo")

数据

dat <- structure(list(A = c(4L, 2L, 1L, 7L), B = c(3L, 3L, 2L, 5L), 
    C = c("Foo", "Bar", "Bar", "Zap")), row.names = c(NA, -4L
), class = "data.frame")

【讨论】:

哇,回复速度真快!工作得很好。也感谢您提供多种选择。

以上是关于如果值与在 r 中有条件删除的值匹配,则删除行的主要内容,如果未能解决你的问题,请参考以下文章

R - 如果列值与字符向量中的任何值匹配,则返回它旁边的列 [重复]

如果整行使用 VBA 匹配,则删除重复的行

jQuery - 如果值与数组中的元素匹配,则禁用复选框

Access VBA:删除单元格值与 Access 表中的值匹配的 Excel 行

当行悬停并且列值与另一行匹配时显示工具提示

如果每个工作表中的字符串匹配,则修复删除行