首页 > 解决方案 > 如何汇总除我指定的列之外的所有列?

问题描述

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

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

标签: rdplyr

解决方案


我会使用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). (如果我错了,请有人纠正我)

编辑:

dplyr 版本 >= 1 的上述两种方法的修改版本,因为summarise_at已被取代

df %>% 
  summarise(across(where(is.numeric) & !Registered, sum))

df %>% 
  summarise(across(-Registered, sum))

推荐阅读