簡體   English   中英

R:基於單個列聚合(總和)但保留所有其他列?

[英]R: Aggregate (sum) based on a single column but keep all other columns?

我正在處理一個包含許多列的數據集。 我想知道是否有一種方法可以基於單個列聚合行但保留所有其他列。

我知道這樣做:

aggregate(data$col.to.be.summed, by=list(data$col1, data$col2, data$col3), FUN=sum)

但是,我有超過 60 列,所以沒有列表 function 有沒有辦法做到這一點? 即只是告訴 R 包括所有其他列?

為了 arguments 的緣故,數據等價於所有其他列包含多個行上每個采樣事件的相同信息(但有更多列):

> col.to.be.summed   col1   col2   col3
>                0      1     XX      A
>                2      1     XX      A
>                0      1     XX      A
>                0      2     XX      B
>                0      3     YY      A
>                4      3     YY      A

我想結束這個:

> col.to.be.summed   col1   col2   col3
>                2      1      XX      A
>                0      2      XX      B
>                4      3      YY      A

我想有一個簡單的命令告訴 R 保留所有其他列而不手動列出它們,但是經過數小時的搜索后我找不到它:/

非常感謝任何幫助!

您可以使用reformulate動態創建一個可以在aggregate中使用的公式。

aggregate(reformulate(names(data)[-1], 'col.to.be.summed'), data, sum)

在哪里

reformulate(names(data)[-1], 'col.to.be.summed') #returns

#col.to.be.summed ~ col1 + col2 + col3

您可以將names(data)[-1]替換為要分組的列。 這也適用names(data)[2:4]

這是一個dplyr解決方案:

library(dplyr) # Version > 1.0.0
data %>% 
   group_by(across(-col.to.be.summed)) %>%
   summarise(x = sum(col.to.be.summed, na.rm = TRUE))
# A tibble: 3 x 4
# Groups:   col1, col2 [3]
   col1 col2  col3      x
  <int> <chr> <chr> <int>
1     1 XX    A         2
2     2 XX    B         0
3     3 YY    A         4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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