我如何汇总除我指定的列之外的所有列?

Use*_*ame 5 r dplyr

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

Group, Registered, Votes, Beans
A,     111,        12,     100
A,     111,        13,     200
A,     111,        14,     300
Run Code Online (Sandbox Code Playgroud)

我想将其分组Group,总结除Registered.

summarise_if(
  .tbl = group_by(
    .data = x,
    Precinct
  ),
  .predicate = is.numeric,
  .funs = sum
)
Run Code Online (Sandbox Code Playgroud)

这里的问题是结果是一个数据框,它汇总了所有数字列,包括Registered. 我如何总结所有但Registered

我想要的输出看起来像这样

Group, Registered, Votes, Beans
A,     111,        39,    600
Run Code Online (Sandbox Code Playgroud)

Ice*_*can 8

我会用summarise_at,只是做一个合乎逻辑的载体,它是FALSE用于非数字列RegisteredTRUE其他方式,即

df %>% 
  summarise_at(which(sapply(df, is.numeric) & names(df) != 'Registered'), sum)
Run Code Online (Sandbox Code Playgroud)

如果你只想总结除一列之外的所有内容,你可以这样做

df %>% 
  summarise_at(vars(-Registered), sum)
Run Code Online (Sandbox Code Playgroud)

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

笔记:

  • 因子在技术上是数字,因此如果要排除非数字列因子,请替换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))
Run Code Online (Sandbox Code Playgroud)