我想总结这个数据框中除了一个数字列之外的所有内容。
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)
我会用summarise_at,只是做一个合乎逻辑的载体,它是FALSE用于非数字列Registered和TRUE其他方式,即
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)
| 归档时间: |
|
| 查看次数: |
7104 次 |
| 最近记录: |