【问题标题】:Error when filering on rowSums using dplyr使用 dplyr 过滤行总和时出错
【发布时间】:2018-02-01 10:18:09
【问题描述】:

我有以下 df 其中 df

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

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

PS:普通 rowSums(df)!=0 工作得很好,给了我预期的逻辑

【问题讨论】:

  • 1.您正在尝试将函数 rowSums() 与数字 0 进行比较。正如错误消息所说,比较只能用于原子和列表类型。 2. dplyr::filter 函数设计为将列名作为第二个参数。
  • 谢谢柯特。是的,我考虑过这一点并尝试了 filter(df,everything(),rowSums!=0),但我得到了另一个错误(评估错误:没有注册 tidyselect 变量)。在这种情况下,无论如何都没有选择所有列吗?谢谢。

标签: r filter dplyr rowsum


【解决方案1】:

解决问题的一种更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 一样快,而且它并不总是适用于所有数据类型。

【讨论】:

    【解决方案2】:

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

    不是最难的... 谢谢。

    【讨论】:

      猜你喜欢
      • 2016-11-13
      • 2017-07-18
      • 2017-06-09
      • 1970-01-01
      • 1970-01-01
      • 2019-01-25
      • 1970-01-01
      • 1970-01-01
      • 2020-12-25
      相关资源
      最近更新 更多