我有一个数据集,其中每两行是一个选择集的一部分 - 将用于 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/