R - 如果一个值 = x,则删除 "paired"数据帧中的两行

我有一个数据集,其中每两行是一个选择集的一部分 - 将用于 mlogit 中的离散选择分析。我想根据列中的值删除与选择集关联的所有行。

例如 - 对于这个简单的数据集,假设我想删除一对中的其中一行中有黄色值的所有对(此处由“Set”定义的对)。

我假设必须有一种简单的方法来说明如果此值 = "x"并且此另一列的此值与该行的值匹配,则将两者都删除。我认为它一定与 dplyr 中的 ifelse 或 case_when 有关,但我不确定它的匹配值部分。在 Excel 中,我会使用单元格引用来执行简单的 if_then,但不确定在 R 中执行此操作的最佳方法。谢谢!

data <-  data.frame(Set = sort(rep(1:20,2)), 
                    Choice = rep(c(T,F),20),
                    Color = sample(
                      rep(c("Red","Blue","Green","Yellow"),5)))

最佳答案

您可以选择那些 set,其中所有值都在 Color 列中,而不是 'Yellow'

library(dplyr)
data %>% group_by(Set) %>% filter(all(Color != 'Yellow'))

或者另一种写法是:

data %>% group_by(Set) %>% filter(!any(Color == 'Yellow'))

这也可以用 base R 写

subset(data, ave(Color != 'Yellow', Set, FUN = all))

数据表:

library(data.table)
setDT(df)[, .SD[all(Color != 'Yellow')], Set]

关于R - 如果一个值 = x,则删除 "paired"数据帧中的两行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63948933/

相关文章:

regex - 使用 sed 获取文件的 IPv4 地址并使用前缀导出

javascript - 如何在 graphql 查询中使用带有变量的 % 符号

c# - EF Core、Sqlite、InMemory、Code First - 如何?

perl - 可以在 perl 中定义一个变量,其值不能在子例程中更改吗?

java - 使用 Java 在数组中查找最后一个 3 的倍数

c# - C 和 Arduino 中的有趣部门

reactjs - Gatsby Netlify 构建错误 : Can't resolve '../

r - 使用带有 furrr 的 tidy 评估

ios - 方法 scrollToItemAtIndexPath 在 iOS 14 上不起作用

node.js - Promise.all 调出 "TypeError: undefined is