簡體   English   中英

我如何匯總除我指定的列之外的所有列?

[英]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 ,否則是RegisteredTRUE ,即

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM