2016-04-25 66 views
0

的價值觀我有R A data.table它看起來像這樣的:[R data.table:總結幾行

code gruppe proz_grouped 
1: 1  2 14.751689 
2: 2  2 22.063523 
3: 3  2 35.441111 
4: 4  2 27.743676 
5: 1  3  7.575869 
6: 2  3 23.420090 
7: 3  3 38.513576 
8: 4  3 30.490465 

有一個簡單,優雅的方式來獲得的總和proz_grouped爲代碼(代碼)3和4按組gruppe? 結果應該看起來。像這樣:

code gruppe proz_grouped 
1: 1  2 14.751689 
2: 2  2 22.063523 
3: NA  2 63.18471 
5: 1  3  7.575869 
6: 2  3 23.420090 
7: NA  3 69.0035 

由於代碼不能被概括,我希望的NA的代碼列。

感謝

+0

使用'dput'爲可複製的例子生成代碼,獲得更多的指向你的問題,讓更多的人蔘與回答,獲得更多的答案 – jangorecki

回答

2

我們可以使用recode通過 '代碼' 4改值,然後通過sum

library(data.table) 
library(car) 
df1[, code := recode(code, "c(3,4)=NA") 
     ][, list(proz_grouped = sum(proz_grouped)), .(code, gruppe)] 
# code gruppe proz_grouped 
#1: 1  2 14.751689 
#2: 2  2 22.063523 
#3: NA  2 63.184787 
#4: 1  3  7.575869 
#5: 2  3 23.420090 
#6: NA  3 69.004041 

做組或使用%in%改變3,進入NA,組,「GRUPPE 「並獲得的sum 'proz_grouped'

df1[code %in% 3:4, code := NA][, 
     .(proz_grouped = sum(proz_grouped)) ,.(code, gruppe)] 
+2

或ifelse提供的OP想要聚合的值超過'2'的小破解:setDT(y)[ ,code:= ifelse(code> 2,NA,code)] [,。(res = sum(proz_grouped)),。(gruppe,code)]' –

+2

data.table的修改方法是'DT [code> 2,code:= NA]'。儘管OP並不清楚代碼變量是否需要編輯;對我來說,看起來他們只是暫時想要這個總結。 – Frank

+1

@eddi你說得對,但我將它作爲data.frame複製並轉換爲'data.table'。忘了拿'setDT'部分 – akrun

2
dt[, .(proz_grouped = sum(proz_grouped)) 
    , by = .(code = replace(code, code > 2, NA), gruppe)] 
# code gruppe proz_grouped 
#1: 1  2 14.751689 
#2: 2  2 22.063523 
#3: NA  2 63.184787 
#4: 1  3  7.575869 
#5: 2  3 23.420090 
#6: NA  3 69.004041