[英]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 P2
, P3
, P4
然后追加P1
時Condition
等於"0"
的Col1
和Col2
。
所以結果將是:
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.