使用 dplyr 过滤行总和时出错

Error when filering on rowSums using dplyr

我有以下 df 其中 df <- data.frame(V1=c(0,0,1),V2=c(0,0,2),V3=c(-2,0 ,2))

如果我执行 filter(df,rowSums!=0) 我会收到以下错误: filter_impl(.data, quo) 错误: 评估错误:比较 (6) 仅适用于原子类型和列表类型。

有人知道这是为什么吗? 感谢您的帮助

PS: Plain rowSums(df)!=0 工作得很好并且给了我预期的 logical

好的,我明白了。 过滤器(df,rowSums(df)!=0)

不是最难的... 谢谢。

解决该问题的一种更 tidyverse 风格的方法是使您的数据 tidy,即只有一个数据值。

示例数据

my_mat <- matrix(sample(c(1, 0), replace=T, 60), nrow=30) %>% as.data.frame

整理数据并使用 group_by

形成隐式行总和
my_mat %>% 
    mutate(row = row_number()) %>%
    gather(col, val, -row) %>%
    group_by(row) %>%
    filter(sum(val) == 0)

这种整洁的方法并不总是像基本 R 一样快,而且它并不总是适用于所有数据类型。