![](/img/trans.png)
[英]How do I `group_by` and `summarise` while keeping all numeric columns without knowing those columns' names?
[英]How do I summarise all columns except one(s) I specify?
我想總結這個數據框中除了一個數字列之外的所有內容。
Group, Registered, Votes, Beans
A, 111, 12, 100
A, 111, 13, 200
A, 111, 14, 300
我想按Group
進行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))
我們可以使用summarise_if
library(dplyr)
df %>%
select(-Registered) %>%
summarise_if(is.numeric, sum)
# Votes Beans
#1 39 600
dt = read.table(text = "
Group Registered Votes Beans
A 111 12 100
A 111 13 200
A 111 14 300
", header=T)
library(dplyr)
# specify grouping variables
v1 = "Group"
v2 = "Registered"
dt %>%
group_by_(v1, v2) %>%
summarise_all(sum) %>%
ungroup()
# # A tibble: 1 x 4
# Group Registered Votes Beans
# <fct> <int> <int> <int>
# 1 A 111 39 600
請注意,我必須假設在每個Group
值中都有一個唯一的Registered
值,因此您可以按兩個變量進行分組,而不是僅按Group
分組並保留Registered
的唯一值。
我需要類似的東西,所以通過使用@akrun 這個答案我做了
df <- as_tibble(df)
df %>%
select(-Type) %>%
summarise_all(sum)
其中“類型”是非數字(字符)列,例如在虹膜數據集中,類型是“物種”列。 所以我得到了所有其他列的總和,這些列恰好是數字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.