r - 我如何总结除我指定的列之外的所有列?

标签 r dplyr

我想总结这个数据框中除了一个数字列之外的所有内容。

Group, Registered, Votes, Beans
A,     111,        12,     100
A,     111,        13,     200
A,     111,        14,     300

我想通过 Group 对其进行分组,总结除 Registered 之外的所有列。
summarise_if(
  .tbl = group_by(
    .data = x,
    Precinct
  ),
  .predicate = is.numeric,
  .funs = sum
)

这里的问题是结果是一个数据框,它汇总了所有数字列,包括 Registered 。除了 Registered 之外,我如何总结所有内容?

我想要的输出看起来像这样
Group, Registered, Votes, Beans
A,     111,        39,    600

最佳答案

我会使用 summarise_at ,并且只为非数字列创建一个逻辑向量,它是 FALSE ,否则为 RegisteredTRUE ,即

df %>% 
  summarise_at(which(sapply(df, is.numeric) & names(df) != 'Registered'), sum)

如果你只想总结除一列之外的所有内容,你可以这样做
df %>% 
  summarise_at(vars(-Registered), sum)

但在这种情况下,您还必须检查它是否也是数字。

笔记:
  • 因子在技术上是数字,因此如果要排除非数字列和因子,请将 sapply(df, is.numeric) 替换为 sapply(df, function(x) is.numeric(x) & !is.factor(x))
  • 如果您的数据很大,我认为使用 sapply(df[1,], is.numeric) 而不是 sapply(df, is.numeric) 会更快。 (如果我错了,请有人纠正我)
  • 关于r - 我如何总结除我指定的列之外的所有列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53522657/

    相关文章:

    r - 有效地为 data.frame 中列的每个唯一值选择最多的行数

    r - 在 group_by 之后通过 mutate 应用函数

    r - 如何将当前行的负值传输到数据帧中的前一行?

    R - 保留非 NA 的最新数据,除非只有 NA 可用

    r - 更改构面标签的外观尺寸

    使用循环将文本模式替换为相邻列中的新文本

    r - DPLYR - 使用列值作为条件将行合并在一起

    r - 如何有条件地将多列中的值替换为 NA

    R dplyr未完成滞后日期差计算

    r - 如何 `unnest` 两个不兼容的嵌套 tibble 列?