【发布时间】:2020-09-18 12:36:06
【问题描述】:
我有一个看起来像这样的数据框(但有更多的列,并且没有有用的“KEEP”列):
df <- tribble( ~Lots.of.cols, ~analyte, ~meta, ~value, ~KEEP,
1, "A", "analyte", NA, FALSE,
1, "A", "unit", "m", FALSE,
1, "A", "method", NA, FALSE,
1, "B", "analyte", "4", TRUE,
1, "B", "unit", "kg", TRUE,
1, "B", "method", "xxx", TRUE)
我想要做的是过滤掉特定分析物的所有行,如果 meta 是“分析物”的行,值列也是 NA。所以在上面的 df 中,前三行应该被过滤掉,因为第一行有 meta = "analyte" 和 value = NA。最后三行 (analyte = "B") 应保留,因为第四行 (meta = "analyte") 有!is.na(value)。
所以我尝试了两种方法。首先是group_by(analyte),然后尝试过滤或替代
df %>%
anti_join(.[is.na(.$value) & .$meta == "analyte", ],
by = c("Lots.of.cols", "analyte", "meta")) -> df
通过这两种方法,我可以删除 meta = "analyte" & is.na(value) 所在的单个行,但不能删除组中的其他行。
【问题讨论】: