簡體   English   中英

R 使用 data.table 對其他列進行分組和求和

[英]R Group by with conditional and sum other columns using data.table

我想根據組的條件對除一個特定列之外的所有列求和。

例如:

Col1    Col2   Condition   Name    P1    P2    P3    P4 
1990    1      0           APPLE   10    20    20    30   
1990    1      1           BAN     30    40    50    50   
1990    1      1           CAR     40    40    30    40   
1990    2      0           DOG     100   20    30    40   
1990    2      1           APPLE   10    20    20    30   
1990    2      1           APPLE   50    20    20    30   

我想SUM P2P3P4然后追加P1Condition等於"0"Col1Col2

所以結果將是:

Col1    Col2   Condition     P1    P2     P3    P4 
1990    1      0             10    100    100   120     
1990    2      0             100   60     70    100   

我知道如何添加data.table但對此data.table

DT[, .(lapply(.SD, sum, na.rm=TRUE), by=.(Col1, Col2), .SDcols=c("P2", "P3", "P4")] 

似乎DT[, setdiff(names(DT), c("P2", "P3", "P4")), with = FALSE]是一個關鍵,但仍然不知道。

我們可以按“Col1中”,“col2的”,然后summarise_at的列, starts_with “P”(改變為每個操作的要求列的范圍內),以獲得sum值,其中“條件”為0,然后創建一個“條件' 0 列

library(dplyr)
df1 %>% 
  group_by(Col1, Col2) %>%
  group_by(P1 = sum(P1[Condition == 0]), add = TRUE) %>% 
  summarise_at(vars(P2:P4), sum) %>%
  mutate(Condition = 0) %>%
  ungroup 
# A tibble: 2 x 7
#   Col1  Col2    P1    P2    P3    P4 Condition
#  <int> <int> <int> <int> <int> <int>     <dbl>
#1  1990     1    10   100   100   120         0
#2  1990     2   100    60    70   100         0

或者使用data.table

library(data.table)
setDT(df1)[,  P1 := sum(P1[Condition == 0]), .(Col1, Col2)][, 
     lapply(.SD, sum) , .(Col1, Col2, P1), .SDcols = P2:P4]

暫無
暫無

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

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