r - 如何汇总除我指定的列之外的所有列?
问题描述
我想总结这个数据框中除了一个数字列之外的所有列。
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
用于非数字列的逻辑向量Registered
,TRUE
否则,即
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))
推荐阅读
- java - Mapstruct 映射空对象的属性
- ios - 如何检测我的应用程序的 vpn 是否在 iOS 中连接?
- c# - 如何在 DynamoDB 中存储 .Net MemorySteam 值?
- javascript - 我可以在 apollo 客户端的错误链接中调用 graphql 突变吗
- authorization - fastapi swagger 不发送带有 url 的令牌
- jmeter - 为不同的操作运行线程组
- rpa - 在 Intellibot Studio 中使用 readfromexcel 组件时出错
- python-2.7 - 在 python 2.7 中相互减去两个日期时间并返回 HH:MM:SS
- ionic4 - ionic 4 ng-true-value equivalence
- node.js - 如何在 Node js 中的异步和等待函数中创建对象?