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)