R 如何总结除我指定的一列以外的所有列?

R 如何总结除我指定的一列以外的所有列?,r,dplyr,R,Dplyr,我想总结一下这个数据框中除了一个数字列以外的所有列 Group, Registered, Votes, Beans A, 111, 12, 100 A, 111, 13, 200 A, 111, 14, 300 我想按分组,将除已注册之外的所有列进行汇总 summarise_if( .tbl = group_by( .data = x, Precinct ), .predica

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

Group, Registered, Votes, Beans
A,     111,        12,     100
A,     111,        13,     200
A,     111,        14,     300
我想按
分组
,将除
已注册
之外的所有列进行汇总

summarise_if(
  .tbl = group_by(
    .data = x,
    Precinct
  ),
  .predicate = is.numeric,
  .funs = sum
)
这里的问题是,结果是一个数据帧,它对所有数字列求和,包括
已注册的
。除了注册的之外,我如何求和

我想要的输出是这样的

Group, Registered, Votes, Beans
A,     111,        39,    600

我会在处使用总结_,只需为非数字列创建一个逻辑向量,该向量为假,否则为注册和真

df %>% 
  summarise_at(which(sapply(df, is.numeric) & names(df) != 'Registered'), sum)
如果你只想总结一个专栏以外的所有内容,你可以这样做

df %>% 
  summarise_at(vars(-Registered), sum)
但在这种情况下,你必须检查它是否也是数字

注:

  • 因子在技术上是数字的,因此如果要排除非数字列和因子,请将
    sappy(df,is.numeric)
    替换为
    sappy(df,函数(x)is.numeric(x)&!is.factor(x))

  • 如果您的数据很大,我认为使用
    sappy(df[1],is.numeric)
    比使用
    sappy(df,is.numeric)
    更快。(如果我错了,请有人纠正我)

dt=read.table(文本=”
团体登记投票
A 111 12 100
A 111 13 200
A 111 14300
“,页眉=T)
图书馆(dplyr)
#指定分组变量
v1=“集团”
v2=“已注册”
dt%>%
分组依据(v1,v2)%>%
汇总所有(总和)%>%
解组()
##A tibble:1 x 4
#团体登记投票
#             
#1A 111 39 600

请注意,我必须假设在每个
值中都有一个唯一的
已注册
值,因此您可以根据这两个变量进行分组,而不是仅根据
进行分组,并保持
已注册
的唯一值

如果

summarise_if(
  .tbl = group_by(
    .data = x,
    Precinct
  ),
  .predicate = is.numeric,
  .funs = sum
)
library(dplyr)
df %>% 
   select(-Registered) %>%
   summarise_if(is.numeric, sum)
#  Votes Beans
#1    39   600

我需要类似的东西,所以通过使用@akrun的答案,我做到了

df%
选择(-Type)%%>%
总结所有(总和)

其中“Type”是非数字(char)列,例如在iris数据集中,Type是“Species”列。所以我得到了所有其他列的总和,恰好是数字。

逗号是值的一部分吗?看起来您没有指定要省略的列的任何位置。不清楚您希望此解决方案的通用性。@AntoniosK逗号不是数据帧的一部分。我只是觉得它们会让阅读变得更容易一些列没有逗号。不一致的模式。在第二个解决方案中,我得到了这个错误:“求值错误:'sum'对因子没有意义。”这意味着其中一个数值列是因子,因此在求和之前必须将其转换为double或int,因为求和对系数没有意义。
列是系数。有两个选项:用
函数(x)is.numeric(x)&替换
is.numeric
!是.factor(x)
或者,将其转换为character,但是如果您将
分组依据(分组)
放在
摘要之前,您可以保持原样
df <- as_tibble(df)

df %>%
select(-Type) %>%
summarise_all(sum)