【发布时间】:2016-05-27 22:48:17
【问题描述】:
如果我整理过数据:
df = expand.grid(Name=c("Sub1","Sub2","Sub3"),Vis=c("Yes","No")) %>%
mutate(KPR_mean=c(NA,1,3,2,3,2),KPR_range=c(NA,4,4,2,6,5)) %>%
filter(complete.cases(.))
我想过滤掉不完整的因子组合,留下一个完整的因子模型。现在,我这样做如下:
df %>%
unite(KPR_mean_range,KPR_mean,KPR_range) %>%
spread(Vis,KPR_mean_range) %>%
filter(complete.cases(.)) %>%
gather(Win,KPR_mean_range,-Name) %>%
separate(KPR_mean_range,c("KPR_mean","KPR_range"),sep="_")
但这似乎真的很冗长,一旦有多个因素和更多变量,也很难扩展。有没有办法过滤分组变量而不是行?即,对于每个名称级别,如果 filter(complete.cases(.)) 将从该组中删除一行,然后删除整个组?
【问题讨论】:
-
您能否以可重复的方式共享您的数据(例如,与
dput())?阅读您发布到 R 中的示例数据以及其中的列类是一件很痛苦的事情。 -
我猜即使这对你不起作用,因为
unite步骤将NA连接为NA_NA和complete.cases()不适用于字符NA_NA。 -
我可能会计算出每个主题的预期行数,并过滤掉行数少于此数的组。类似
n_expected = length(unique(df$Vis)); group_by(df, Name) %>% filter(n() == n_expected)。 -
@Gregor:哎呀,我从来没有意识到你必须这样做。我用相同形式的一些虚构数据替换了它。
-
更改数据会更改代码的结果。