假设数据框看起来像这样:
set.seed(42)
seqs <- sapply(1:20, FUN = function(x) { paste(sample(letters, size = 11, replace = T), collapse = "") })
annot1 <- sapply(1:1000, FUN = function(x) { sample(c("A", "B","C"), size = 1, replace = T)})
annot2 <- sapply(1:1000, FUN = function(x) { sample(c("X", "Y","Z"), size = 1, replace = T)})
values <- rnorm(n = length(annot1), mean = 1, sd = 1)
df <- data.frame(id=sample(seqs, size = length(annot1), replace = T), annot1, annot2, values)
我想获得值高于给定阈值的行,例如在{1}或所有3个条件(但不是2)中value > 1.5
,由变量annot1
或annot2
表示。对于符合此条件的ID,我想要所有值(不仅仅是高于阈值的值)。
我通常使用链接filter()
和n_distinct()
的方法在这种情况下不起作用,因为它会过滤掉值不高于阈值的观察值,这会在我去的时候产生问题以后进行宽格式化以对这些变量进行聚类。
我已经考虑过创建中间变量并使用它们来获取ID,但感觉必须有一个更优雅的解决方案。